将预先提取加入的集合作为条件,以避免 n+1 个选择
2022-09-04 02:11:47
假设 Item 和 Bid 是实体:一个项目有许多 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.amount > 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();