0

私は3つの豆を持っています:製品、色、価格

価格 - 商品関係 - @ManyToOne

製品 - 色の関係 - @ManyToMany

各色には 3 つの製品があり、各製品には 3 つの価格があります。

指定した Color のすべての Price を取得する必要がありますか? HQLでこれを行うにはどうすればよいですか?

4

1 に答える 1

0

「指定された色のすべての価格を取得する必要がありますか?」この質問に答えられるのはあなただけです。あなたのビジネス要件を知ることはできません。

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")

于 2013-07-16T10:12:19.230 に答える