hibernate配置級聯刪除

一個版本,綁定多個項目. StoneosVersionProject表用於配置版本與項目的關聯關係。

版本對象的hibernate配置文件中設置一對多關係如下:

        <!--  版本和項目關係-->
        <set name="statProjects" inverse="true" cascade="delete">
            <key>
                <column name="stoneos_version_id" />
            </key>
            <one-to-many class="htf.dbmgmt.filemanage.StoneosVersionProject" />
        </set>

set節點的inverse和cascade不同配置下,hibernate的行爲如下

1. inverse=true, cascade=delete
版本被刪除,版本與項目的關聯關係記錄被刪除

2. inverse=false, cascade=delete
版本被刪除時,hibernate嘗試置關聯關係爲當前版本的記錄,版本字段爲null. 當置位失敗時,版本不能刪除

3. inverse=false
同2

4. inverse=true
版本被刪除,版本與項目關聯關係記錄未刪除,未更新

5. cascade=delete
同2 (因爲inverse默認爲false)


總結:

Inverse:負責控制關係,默認爲false,也就是關係的兩端都能控制,但這樣會造成一些問題,更新的時候會因爲兩端都控制關係,於是重複更新。一般來說有一端要設爲true。

Cascade:負責控制關聯對象的級聯操作,包括更新、刪除等,也就是說對一個對象進行更新、刪除時,其它對象也受影響,比如我刪除一個對象,那麼跟它是多對一關係的對象也全部被刪除。

發佈了15 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章