1. 程式人生 > >Spring整合hibernate 雙向多對多級聯刪除問題

Spring整合hibernate 雙向多對多級聯刪除問題

       最近在在做一個專案的時候,遇到關於hibernate的雙向多對多級聯刪除的問題,上網搜尋關於多對多刪除的解釋很少,但是雙向多對多級聯刪除的需求也有很多,花了一整天時間才徹底弄明白級聯刪除的相關細節問題。下面就我個人理解做相關總結。        下面是兩個實體類中的多對多的對映關係配置:         注意:下面提到的父方和子方是通過inverse屬性來設定的,如將inverse屬性設定為true,意思是將當前表交給對方表來管理,即當前表為子方。反之,inverse屬性為false,即當前表來維護關係。另外,不要將兩個表的inverse屬性都設定為true,否則會引發錯誤。
          Information.hbm.xml檔案           <set name="users" table="USER_INFORMATION" inverse="false"    lazy="false" cascade="none">
            <key>
                <column name="INID" />
            </key>
            <many-to-many class="com.ckTime.domain.User" column="UID"/>
        </set>
        user.hbm.xml檔案          <set name="infos" table="USER_INFORMATION" inverse="true" lazy="false" cascade="none">
            <key>
                <column name="UID" />
            </key>
            <many-to-many class="com.ckTime.domain.Information" column="INID"/>
        </set>
        關於雙向多對多級聯刪除需求不同,cascade屬性的值也就不一樣。首先,先       給還不太清楚cascade屬性作用的小夥伴們大概講解一下:    cascade可以設定的值有 none,all,delete,save-update等等:    none:只刪除父方和中間表的相關資訊    all:級聯刪除或更新父方和子方表中的資訊    delete:級聯刪除父方和子方的所有資訊,包括中間表的資訊    save-update:級聯儲存或修改子方和父方表中的資訊 不同需求設定cascade值不同,下面應對不同需求,給出相關的cascade值:       ① .級聯儲存或修改操作:cascade=“save-update”;       ②.刪除父方表和中間表的資訊,但不刪除子方表的資訊:cascade=“none”;       ③.既要做刪除操作,還要做更新操作:cascade=“all”;       ④.刪除子方和父方表中的所有資訊:cascade=“delete”;  小夥伴們可以根據自己的需求來選擇設定不同的值,如有解釋不當的地方,請指正,最後希望我的文章能幫到大家。