Spring整合hibernate 双向多对多级联删除问题

来源:互联网 发布:linux快速安装php环境 编辑:程序博客网 时间:2024/06/05 18:07
       最近在在做一个项目的时候,遇到关于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”;

      

      小伙伴们可以根据自己的需求来选择设置不同的值,如有解释不当的地方,请指正,最后希望我的文章能帮到大家。
     


1 0
原创粉丝点击