JPA @OrderBy()通过关系表
我需要一些JPA框架的帮助。 我已经阅读了关于这个主题的一些答案,但我无法得出任何结论。
首先是一个我正在讨厌的设计的例子。
@BusinessObject public class ClassA { @Column(name = "ID", nullable = false) private Long id; @OneToMany(mappedBy = "classAAttr") private Collection 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()子句和/或位置。
我已经阅读了有关比较器接口的一些内容,但不幸的是,由于业务策略,我需要确保没有其他方法……
我该怎么办?
提前谢谢你们。
@OrderBy的API文档说明:
属性或字段名称必须对应于相关类或嵌入类的持久属性或字段的属性或字段名称:
http://docs.oracle.com/javaee/6/api/javax/persistence/OrderBy.html
因此,不能通过B的属性对A中的AB进行排序。
替代方法是通过某种方式编写查询或进行内存排序。 例如,Hibernate有一个@Sort
注释,您可以使用它来加载内存中的排序,方法是让目标实体实现Comparable或指定Comparator:
见2.4.6.1节:
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/