0

私は2つのエンティティを持っています

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 に答える