我在Spring 3.0.5中使用Hibernate 3.6。以編程方式指定休眠時多對一的延遲加載
我有以下映射用戶對象
<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" />
...
用戶具有與組織的一個多對一的關係。通常情況下,我希望這種關係能夠被加載,所以映射的默認設置爲lazy = false(不指定任何內容)。
在某些情況下,我不想急於加載組織。我試圖用一個標準來指定它
(User)getSession().createCriteria(User.class)
.add(Restrictions.eq("id",id))
.setFetchMode("organization", FetchMode.SELECT)
.uniqueResult();
但是取消模式被忽略。 Hibernate仍然急切地加載組織關係。幾個小時以來,我一直對此感到頭痛。任何幫助,將不勝感激。
同意。當你需要這樣做時,讓事情變得遲緩並重寫。如果您絕對確定您會一直希望該協會填充,那麼協會只應該是EAGER。 – atrain
非常感謝回覆。我同意一般情況下,關係應該保持懶惰。然而,在這種情況下,除了在某種情況下,我幾乎總是需要這種關係成爲EAGER。這太糟糕了,沒有辦法以編程方式讓關係懶散。至於fetch = select:我最初使用fetchmode = lazy,但在hibernate 3.6中,它已被棄用。 javadoc說要使用SELECT來代替。 (我最初嘗試使用fetchmode = LAZY,但那也行不通。) – MicGer
其實,如果沒有辦法以編程方式建立關係LAZY,爲什麼會有FetchMode.LAZY值? – MicGer