JPA @OrderBy()通过关系表

时间:2014-12-04 16:44:56

标签: java jpa collections sql-order-by relational

我需要一些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()子句和/或位置。

我已经阅读了有关比较器界面的一些内容,但不幸的是,由于商业政策,我需要确保没有别的办法......

我该怎么做?

提前谢谢你们。

1 个答案:

答案 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/