0

我有 3 种豆子:产品、颜色、价格

价格 - 产品关系 - @ManyToOne

产品 - 颜色关系 - @ManyToMany

每种颜色有 3 个产品,每个产品有 3 个价格

我需要获取指定颜色的所有价格吗?如何使用 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 上使用急切关系/连接提取(例如:“从颜色 c 中选择 c 左连接提取 c.products”)

于 2013-07-16T10:12:19.230 回答