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