我有两个实体
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
对优化查询有什么建议吗?提前致谢。