私は3つの豆を持っています:製品、色、価格
価格 - 商品関係 - @ManyToOne
製品 - 色の関係 - @ManyToMany
各色には 3 つの製品があり、各製品には 3 つの価格があります。
指定した Color のすべての Price を取得する必要がありますか? HQLでこれを行うにはどうすればよいですか?
「指定された色のすべての価格を取得する必要がありますか?」この質問に答えられるのはあなただけです。あなたのビジネス要件を知ることはできません。
HQL の時点で必要なことは、Color エンティティを取得してその価格に移動するだけです。
// obtain session, start transaction..
List<Color> colors = session.createQuery("select c from Color c where name = :name").setString("name", "blue").list();
Set<Price> prices = new HashSet<Price>();
for(Color c : colors) {
for(Product p : c.getProducts()) {
prices.addAll(p.getPrices());
}
}
// end transaction..
データの数と分布によっては、上記のプログラムが過剰なクエリとパフォーマンスの低下をもたらす可能性があることに注意してください。HQL での熱心なリレーションシップ/結合フェッチの使用を検討してください (例: "select c from Color c left join fetch c.products")