JPQL查询:查找集合中的最大对象

时间:2013-01-25 15:05:02

标签: java hibernate jpa jpql

我有两个实体

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

对优化查询的任何建议??提前谢谢。

1 个答案:

答案 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)
相关问题