私は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
最適化されたクエリの提案はありますか?前もって感謝します。