hibernate配置級聯刪除
阿新 • • 發佈:2019-01-07
一個版本,繫結多個專案. 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:負責控制關聯物件的級聯操作,包括更新、刪除等,也就是說對一個物件進行更新、刪除時,其它物件也受影響,比如我刪除一個物件,那麼跟它是多對一關係的物件也全部被刪除。