定义列表的顺序

我有以下问题。 我有三个类,A,B和C. A包含一个关于B:s的OneToMany关系列表。 B包含与C的ManyToOne关系.C包含名为“name”的字段,B还包含名为“name”的字段。 我想要完成的是让A列表中的项目主要按C的名称排序,其次按B的名称排序 – 问题是我不知道如何做到这一点。 它甚至可能吗?

我正在使用EclipseLink作为我的JPA提供程序。

class A { @OneToMany @OrderBy("bcname, b.name") <---- this is the problem List b; } class B { @ManyToOne C c; String name; } class C { String name; } 

编辑是的,我尝试了不同的变体,例如@OrderBy(“c.name”)不起作用,我只是收到一条错误消息,告诉我实体类b不包含名为“c.name”的字段。

这是不可能的。 @OrderBy只接受直接属性/字段名称,而不接受嵌套属性。 这是有道理的,真的,因为“c”表 – 取决于你的提取策略可能甚至不是选择发出的检索你的“b”的一部分。

ChssPly76是对的。

你可以做的是创建一个这样的命名查询:

  SELECT b FROM B b WHERE ba = :mya ORDER BY bcname 

你试过@OrderBy("c.name", "name")吗?

你不应该使用“b。” 因为暗示@OrderBy将在b数组的B实例的列上完成。

你有没有尝试过:

  @OrderBy("c.name ASC", "name ASC") 

它不可能在javax.persistence.OrderBy中(如ChssPly76),但是当我使用Hibernate时,我使用Formula()注释在PLAIN SQL中构造新列,然后在它上面使用OrderBy:

 class A { @OneToMany @OrderBy("orderCol") <---- reference to virtual column List b; } class B { @ManyToOne C c; String name; @org.hibernate.annotations.Formula( "( select C_table.name as orderCol from C_table where C_table.id = id )" ) <------------------------------------------ join with plain SQL statment String orderCol; } 

可能是EclipseLink有相同的可能性吗?