【发布时间】:2012-09-29 04:43:36
【问题描述】:
假设 Item 和 Bid 是实体:一个 Item 有多个 Bid。它们在 Hibernate 中以典型的父/子关系映射:
<class name="Item" table="ITEM">
...
<set name="bids" inverse="true">
<key column="ITEM_ID"/>
<one-to-many class="Bid"/>
</set>
</class>
在执行此查询后尝试访问每个项目的出价时,如何避免 n+1 选择?
List<Item> items = session.createCriteria(Item.class)
.createAlias("bids", "b").
.add(Restrictions.gt("b.amount", 100)).
.list();
注意我需要急切地获取出价,但对收藏有进一步的限制(b.数量 > 100)
我尝试了以下失败:
List<Item> items = session.createCriteria(Item.class)
.setFetchMode("bids", FetchMode.JOIN).
.createAlias("bids", "b").
.add(Restrictions.gt("b.amount", 100)).
.list();
List<Item> items = session.createCriteria(Item.class)
.createCriteria("bids")
.add(Restrictions.gt("amount", 100)).
.list();
【问题讨论】:
-
stackoverflow.com/questions/617145/… 我想之前有人问过它......
标签: java hibernate hibernate-criteria