有两个实体:
@Entity
public class A {
@Id
Integer id;
@ManyToMany
@JoinTable(
name = "a_b",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = @JoinColumn(name = "b_id")
)
@OrderBy("name")
Set<B> bs;
}
@Entity
public class B {
@Id
Integer id;
String name;
}
我想获取绑定到实体A的实体B的列表。一般来说,这通常很容易完成:
SELECT a.bs FROM A a WHERE a.id=:id
但问题是我仍然需要在结果列表中对实体B进行排序。此代码将不起作用:
SELECT a.bs FROM A a WHERE a.id=:id ORDER BY a.bs.name ASC
因为在访问实体列表时无法获取实体属性(y 唯一可用的属性a.bs是大小)。由于B类中没有字段A ,因此问题更加复杂,因此我不能这样做:
SELECT b FROM B b WHERE b.a.id=:id
所以。我们需要通过实体 id A获取实体B的排序列表。我做了这个 JPQL 查询:
SELECT a.bs AS b FROM A a WHERE a.id=:id ORDER BY b.name ASC
但是在编译的时候,出现错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'b.name'
虽然在编辑 IDEA 代码时,它没有显示任何错误。
我应该如何修改查询以获取实体B的排序列表?
@Sergey Mitrofanov提出的查询解决了我的问题: