0

我有两个实体

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

对优化查询有什么建议吗?提前致谢。

4

1 回答 1

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)
于 2013-01-26T10:13:42.533 回答