我有 3 种豆子:产品、颜色、价格
价格 - 产品关系 - @ManyToOne
产品 - 颜色关系 - @ManyToMany
每种颜色有 3 个产品,每个产品有 3 个价格
我需要获取指定颜色的所有价格吗?如何使用 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 上使用急切关系/连接提取(例如:“从颜色 c 中选择 c 左连接提取 c.products”)