我有3个豆子:产品,颜色,价格
价格 - 产品关系 - @ManyToOne
产品 - 颜色关系 - @ManyToMany
每种颜色有3种产品,每种产品有3种价格
我是否需要获取指定颜色的所有价格? 我如何使用HQL进行此操作?
答案 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”)