2014-12-04 69 views
0

我需要一些JPA框架的帮助。 我读过一些关于这个话题的答案,但我无法得出任何结论。JPA @OrderBy()通过关系表

第一个继承人是我与之搭配的设计的一个例子。

@BusinessObject 
public class ClassA { 

    @Column(name = "ID", nullable = false) 
    private Long id; 

    @OneToMany(mappedBy = "classAAttr") 
    private Collection<ClassAB> classABCollection; 

    //STUFF AND OTHER COLUMNS..... 
} 

public class ClassAB { 

    @Column(name = "ID", nullable = false) 
    private Long id; 

    @JoinColumn(name = "TABLE_A_ID", referencedColumnName = "ID") 
    @ManyToOne 
    private ClassA classAAttr; 

    @JoinColumn(name = "TABLE_B_ID", referencedColumnName = "ID") 
    @ManyToOne 
    private ClassB classBAttr; 

    //STUFF AND OTHER COLUMNS..... 
} 

@BusinessObject 
public class ClassB { 

    @Column(name = "ID", nullable = false) 
    private Long id; 

    @Column(name = "ORDERCLAUSE", nullable = false) 
    private String orderClause; 

    //STUFF AND OTHER COLUMNS..... 
} 

所以我需要在ClassB的的orderClause属性命令的ClassA中的classABCollection,但我无法找到它的右@OrderBy()子句和/或位置。

我读过有关Comparator接口,但可惜的是,由于业务的政策,我需要确保有没有其他的方法有些东西...

我应该怎么办呢?

谢谢你们提前。

回答

2

为@OrderBy笔记的API文档:

的属性或字段名称必须对应于一个持久 属性或字段关联的类或内嵌入类:

http://docs.oracle.com/javaee/6/api/javax/persistence/OrderBy.html

因此,用A的属性对AB排序是不可能的。

替代方法是编写查询或通过某种方式进行内存排序。休眠,例如,具有@Sort注释您可以使用施加于负载的内存排序,或者通过具有目标实体实现可比较的或通过指定一个比较:

见节2.4.6.1:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

+0

谢谢你的回答Alan。 我现在明白了。 不可以。 我将实施比较器方法。 – 2014-12-05 21:32:15