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”;

      

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值