【问题标题】:JPA @OrderBy() Through Relational TableJPA @OrderBy() 通过关系表
【发布时间】:2014-12-04 16:44:56
【问题描述】:

我需要一些有关 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() 子句 AND/OR 位置。

我已经阅读了一些关于比较器接口的内容,但不幸的是,由于业务政策,我需要确保没有其他方法......

我应该怎么做?

提前谢谢你们。

【问题讨论】:

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


    【解决方案1】:

    @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/

    【讨论】:

    • 感谢艾伦的回答。我现在知道了。没办法。我将实现 Comparator 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2011-12-08
    • 2019-08-31
    • 2013-08-11
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多