hibernate hql,加入3个表

时间:2013-07-16 09:57:03

标签: hibernate hql

我有3个豆子:产品,颜色,价格

价格 - 产品关系 - @ManyToOne

产品 - 颜色关系 - @ManyToMany

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

我是否需要获取指定颜色的所有价格? 我如何使用HQL进行此操作?

1 个答案:

答案 0 :(得分: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上使用热切关系/连接提取(例如:“从Color c left join fetch c.products中选择c”)