2014-12-04 68 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