[Hibernate]フェッチの設定
Root→Sub1→Sub2のように関連がある場合、関連するエンティティはデフォルトでは全て遅延フェッチされる(実際にアクセスされるまでSQLが発行されない)
hbmでfetch="join"を設定することで、常に同時にselectすることができる。
<set name="fetchSub1s" table="fetch_sub1" inverse="true" fetch="join"> <key> <column name="root_id" not-null="true" /> </key> <one-to-many class="fetch.FetchSub1" /> </set>
常にjoinが必要ということはまずないので、状況に応じてjoinするかどうか選択するには、criteriaのsetFetchModeを使う。
Criteria criteria = session.createCriteria(FetchRoot.class); criteria.setFetchMode("fetchSub1s", FetchMode.JOIN); criteria.setFetchMode("fetchSub1s.fetchSub2s", FetchMode.JOIN);