Spring3.0.5でHibernate3.6を使用しています。
Userオブジェクトに対して次のマッピングがあります
<class name="foo.User" table="FOO_USER">
<id column="USER_ID" name="id" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property name="firstName" column="FIRST_NAME" type="java.lang.String" length="100"/>
...
<many-to-one name="organization" column="ORGANIZATION_ID class="foo.Organization" not-null="true" update="false" />
...
ユーザーは組織と多対1の関係にあります。通常、私はその関係を熱心にロードしたいので、マッピングはデフォルト設定のlazy = false(何も指定しないことによる)のままです。
組織を熱心にロードしたくない場合があります。基準でこれを指定してみました
(User)getSession().createCriteria(User.class)
.add(Restrictions.eq("id",id))
.setFetchMode("organization", FetchMode.SELECT)
.uniqueResult();
ただし、フェッチモードは無視されます。Hibernateは依然として組織の関係を熱心にロードします。私はこれに対して頭を数時間ノックしてきました。どんな助けでもいただければ幸いです。