Item と Bid がエンティティであるとしましょう。Item には多くの入札があります。それらは、典型的な親子関係で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();