我有两个实体
Class A{
@OneToMany(mappedBy = "a", cascade = CascadeType.REMOVE)
private List<B> b;
private Integer credits;
//other fields
}
Class B{
@ManyToOne
@JoinColumn(name = "a_fk")
private A a;
private Integer reputations;
//other fields
}
现在我想为每个A选择名声最高的B.
我目前正在做的是
"select a FROM A a ORDER BY a.credits DESC"; //maximum results set to 500
然后在每个A中找到最高的B.
for (A a: aList) {
bList.add(Collections.max(a.getB(),new bComparator()));
}
但这个解决方案不是很直观。
我尝试编写下面的查询,但没有给出所需的结果。
select b FROM B b WHERE b.reputations = (SELECT MAX(b.reputations) FROM B bInner WHERE bInner.a.id = b.a.id) ORDER BY b.a.credits DESC
对优化查询的任何建议??提前谢谢。
答案 0 :(得分:0)
这应该是您的查询,我已经测试过了:
select distinct a,b
FROM A a JOIN a.b b
WHERE b.reputations=(SELECT MAX(b2.reputations) FROM B b2 WHERE b2.a=a)