Java 定义列表的顺序
我有以下问题。我有三个类,A、B和C。A包含一个由B:s组成的一对一的关系列表。B包含与C的多通关系。C包含一个名为“name”的字段,B还包含一个名为“name”的字段。我想完成的是让A的列表中的项目主要按C的名字排序,其次按B的名字排序——问题是我不知道怎么做。有可能吗 我使用EclipseLink作为我的JPA提供商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
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”)