JPA @OrderBy() Through Relational Table

我的梦境 提交于 2019-12-02 15:42:56

问题


I need some help with the JPA Framework. I've read some answers "kind of" about this topic but I couldn't reach any conclusion.

First heres an examplo of the design i'm wooking with.

@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.....
}

So I need to order the classABCollection in ClassA by the orderClause attribute in ClassB, but I can't find the right @OrderBy() clause AND/OR location for it.

I've read some things about the Comparator Interface but, unfortunately, due to business policy, I need to be sure that there is no other way...

How Should I Do It?

Thank you guys in advance.


回答1:


The API docs for @OrderBy note:

The property or field name must correspond to that of a persistent property or field of the associated class or embedded class within :

http://docs.oracle.com/javaee/6/api/javax/persistence/OrderBy.html

so sorting AB in A by a property of B is not possible.

The alternatives are to write a query or do an in memory sort by some means. Hibernate, for example, has an @Sort annotation which you can use to apply an in-memory sort on load, either by having the target Entity implement Comparable or by specifying a Comparator:

See section 2.4.6.1:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/



来源:https://stackoverflow.com/questions/27299375/jpa-orderby-through-relational-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!