hibernate的 fetch lazy inverse cascade
1.fetch 和 lazy 主要用于級聯(lián)查詢(select) 而 inverse和cascade主要用于級聯(lián)增、加刪、除修改(sava-update,delete)
2.想要刪除父表中的記錄,但希望子表中記錄的外鍵引用值設(shè)為null的情況:
父表的映射文件應該如下配置:
<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可有可無,并且子表的映射文件中inverse沒必要設(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.想要刪除父表中的記錄,但希望子表中記錄的外鍵引用值設(shè)為null的情況:
父表的映射文件應該如下配置:
<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可有可無,并且子表的映射文件中inverse沒必要設(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)于級聯(lián)查找
對子表的持久化類進行查找的時候,會一起把子表持久化類中的父表持久化類的對象一起查詢出來,在頁面中可以直接取值的情況:
要把父表的映射文件中設(shè)置 lazy 屬性如下:
<class name="com.sino.hibernate.Emp" table="EMP" schema="SCOTT" lazy="false">
這樣就可以直接在頁面中取值 (類似于這樣的取值 client.cmanager.id)
如果沒有設(shè)置 lazy="false" 則會拋出異常
javax.servlet.ServletException: Exception thrown by getter for property cmanager.realName of bean cl
在Action中取值的話就會拋出
could not initialize proxy - the owning Session was closed的異常
posted on 2009-03-09 19:41 草原上的駱駝 閱讀(536) 評論(0) 編輯 收藏 所屬分類: JAVA框架