Hibernate inverse 详解

继续上一篇博客介绍的级联继续如下理解


inverse的值是boolean值,也就是能设置为true或false。 如果一方的映射文件中设置为true,说明在映射关系(一对多,多对多等)中让对方来维护关系。如果为false,就自己来维护关系。默认值是true。 并且这属性只能在一端设置。比如一对多,这个一端。也就是在有set集合的这方设置。


tb_factory.hbm.xml的文件如下:

<!--         inverse="true",让对方维护关系,此时这里的cascade设置没什么用,因为自身不维护关系,它也就失效了。 -->
        <set name="books"  inverse="true" cascade="save-update" > 
            <key column="factoryid"></key>
            <one-to-many class="com.book.web3.Book" />
        </set>

tb_books.hbm.xml

<!-- 		这个级联就有用,因为是让自己这方维护关系 -->
		<many-to-one name="factory" class="com.book.web3.Factory" cascade="all" >  <!--所有情况下均进行关联操作,即save-update和delete。 -->
		    <column name="factoryid"></column>
		</many-to-one>


总结:

对于设置了cascade就可以维护双方关系,为什么还要设置inverse呢,这是由于

Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true


到这里,inverse和cascade这两个的作用就已经讲解完了

1、inverse的权限在cascade之上,意思就是cascade是否有用,还得看inverse这个属性

2、inverse的作用:在映射关系中,让其中一方去维护关系,好处就是能提高性能,不用重复维护。维护两种关系,看下

  2.1 控制级联关系是否有效

          cascade是否有效,就得看inserve的值,如果是自己方来维护关系,那么cascade就有效,反之无效

  2.2 控制外键关系

    这个就得通过让自己拥有对方的实例引用(可能是set,也可能就是单个存储对象的变量),这样才具备控制外键关系的能力,然后看inserve的值,

3、inverse只能在一的一方设置,并且默认值是true,也就是说,不设置inverse时,默认是让多的一方去维护关系,这种一般是在双向、外键关系中才设置inverse的值,如果是单向的,就只有一方有维护关系的权利。

4、通过学习这两个属性,在测试代码中,就不必那么麻烦了,只需要考虑维护关系的一方,另一方就会自动保存了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值