Java 定义列表的顺序

Java 定义列表的顺序,java,jpa,Java,Jpa,我有以下问题。我有三个类,A、B和C。A包含一个由B:s组成的一对一的关系列表。B包含与C的多通关系。C包含一个名为“name”的字段,B还包含一个名为“name”的字段。我想完成的是让A的列表中的项目主要按C的名字排序,其次按B的名字排序——问题是我不知道怎么做。有可能吗 我使用EclipseLink作为我的JPA提供商 class A { @OneToMany @OrderBy("b.c.name, b.name") <---- this is the problem

我有以下问题。我有三个类,A、B和C。A包含一个由B:s组成的一对一的关系列表。B包含与C的多通关系。C包含一个名为“name”的字段,B还包含一个名为“name”的字段。我想完成的是让A的列表中的项目主要按C的名字排序,其次按B的名字排序——问题是我不知道怎么做。有可能吗

我使用EclipseLink作为我的JPA提供商


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

class B {
   @ManyToOne
   C c;
   String name;
}

class C {
   String name;
}

甲级{
@独身癖

@OrderBy(“b.c.name,b.name”)您是否尝试过
@OrderBy(“c.name”,“name”)

您不应该使用“b”,因为这意味着@OrderBy将在b数组中b实例的列上执行。

您尝试过:

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

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

ChssPly76是正确的

您可以创建一个命名查询,如下所示:

 SELECT b 
 FROM B b 
 WHERE b.a = :mya 
 ORDER BY b.c.name

在javax.persistence.OrderBy(比如ChssPly76)中是不可能的,但是当我使用Hibernate时,我用带有Formula()注释的纯SQL构造了新列,然后在上面构建了OrderBy:

class A {
   @OneToMany
   @OrderBy("orderCol") <---- reference to virtual column
   List<B> 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;
}
A类{
@独身癖
@OrderBy(“orderCol”)