Hibernate之inverse和cascade详解

文章:Hibernate自学详细笔记

    继Hibernate学习笔记整理之后,发现inverse和cascade这两个属性在配置过程中比较含糊,仔细比较一下是有些地方比较像,所以很容易搞糊涂。借助此文来阐述下inverse和cascade的区别。


什么是inverse?

    默认值为false;也就是双方都可以维护关系。如果在一方中显示的设置为false的话那么就意味着本方维护关系。如果设置为true的话表示本方不维护关联关系。

    只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响。如果两端都设置为true的时候是不对的,这样的情况下会导致没有人维护关联关系。


什么是Cascade?


     默认是none。表示不级联。

    all:所有情况下都进行关联操作。

    save-update:在执行save/update/saveorupdate的时候进行关联操作。

    delete:在delete的时候进行关联操作。

    什么意思呢?

    就是说:当A、B两个对象有关联关系的时候,如果这时候映射时设置为delete的话,那么在删除A的时候会级联的删除B。使得数据保持完整性约束。


什么不同呢?

     inverse和cascade没有什么关系。

    Commit后,这两个属性发挥作用的时间是不一样的,Hibernate会根据对象的改变,以及casade的属性的设置生成一系列的action,比如增删改的action,每个action都有自己的execute方法以及执行的sql语句。当所有的action生成好之后,Hibernate会执行他们,这时候检查inverse属性的值,如果设置为true那么不执行,如果是false的话就执行sql。    

    cascade是在主控方操作的时候级联发生的。inverse:在提交后flush时,对session的所有set,Hibernate会判断有没有更新,如果有对对应的有变化的set执行sql,执行sql之前先判断inverse,if(inverse == true) return;


Hibernate 优化:inverse

    inverse在多对多的关系中发挥作用不大(对运行的效率来说),但是在一对多的关联关系中作用是巨大的,一对多的关系中,如果设置为一的一方维护关联关系,那么每次改变(比如说:删除)“一”的一方数据时,因为“一”的这一方要维护关联关系那么势必要改变多个“多”的一方中表中关联的数据。因为“多”的这一方数据是很多的,让“一”的一方来维护的话那么就会更新多次“多”的一方的数据,如果让多方维护数据的时候,如果“一”的一方删除时只需要设置多的一方的与之关联的数据列为null即可。

      当一的这方加载对象内容的时候,一这方维护关系那么会主动去加载多的这方所与之关联的对象,而当多这一方维护关联关系的时候,则效率就大大提升了,多的一方只需要加载一方的内容就可以了,这样的话所需要的代价更低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值