1. 程式人生 > >hibernate配置級聯刪除

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:負責控制關聯物件的級聯操作,包括更新、刪除等,也就是說對一個物件進行更新、刪除時,其它物件也受影響,比如我刪除一個物件,那麼跟它是多對一關係的物件也全部被刪除。