我需要一些JPA框架的帮助。 我已经阅读了一些答案"有点"关于这个话题,但我无法得出任何结论。
首先是一个与我讨价还价的设计的例子。
@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()子句和/或位置。
我已经阅读了有关比较器界面的一些内容,但不幸的是,由于商业政策,我需要确保没有别的办法......
我该怎么做?
提前谢谢你们。
答案 0 :(得分:2)
@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/