hibernate的 fetch lazy inverse cascade
1.fetch 和 lazy 主要用于級(jí)聯(lián)查詢(xún)(select) 而 inverse和cascade主要用于級(jí)聯(lián)增、加刪、除修改(sava-update,delete)
2.想要?jiǎng)h除父表中的記錄,但希望子表中記錄的外鍵引用值設(shè)為null的情況:
父表的映射文件應(yīng)該如下配置:
<set name="emps" inverse="false" cascade="all">
<key>
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="com.sino.hibernate.Emp" />
</set>
inverse="false"是必須的,cascade可有可無(wú),并且子表的映射文件中inverse沒(méi)必要設(shè)置,cascade也可以不設(shè)置,如果設(shè)置就設(shè)置成為cascade="none"或者cascade="sava-update"
<many-to-one name="dept" class="com.sino.hibernate.Dept" fetch="select" cascade="save-update">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
2.想要?jiǎng)h除父表中的記錄,但希望子表中記錄的外鍵引用值設(shè)為null的情況:
父表的映射文件應(yīng)該如下配置:
<set name="emps" inverse="false" cascade="all">
<key>
<column name="DEPTNO" precision="2" scale="0" />
</key>
<one-to-many class="com.sino.hibernate.Emp" />
</set>
inverse="false"是必須的,cascade可有可無(wú),并且子表的映射文件中inverse沒(méi)必要設(shè)置,cascade也可以不設(shè)置,如果設(shè)置就設(shè)置成為cascade="none"或者cascade="sava-update"
<many-to-one name="dept" class="com.sino.hibernate.Dept" fetch="select" cascade="save-update">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
3.關(guān)于級(jí)聯(lián)查找
對(duì)子表的持久化類(lèi)進(jìn)行查找的時(shí)候,會(huì)一起把子表持久化類(lèi)中的父表持久化類(lèi)的對(duì)象一起查詢(xún)出來(lái),在頁(yè)面中可以直接取值的情況:
要把父表的映射文件中設(shè)置 lazy 屬性如下:
<class name="com.sino.hibernate.Emp" table="EMP" schema="SCOTT" lazy="false">
這樣就可以直接在頁(yè)面中取值 (類(lèi)似于這樣的取值 client.cmanager.id)
如果沒(méi)有設(shè)置 lazy="false" 則會(huì)拋出異常
javax.servlet.ServletException: Exception thrown by getter for property cmanager.realName of bean cl
在Action中取值的話(huà)就會(huì)拋出
could not initialize proxy - the owning Session was closed的異常
posted on 2009-03-09 19:41 草原上的駱駝 閱讀(550) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): JAVA框架