Inverse和cascade是Hibernate映射中最难掌握的两个属性。两者都在对象的关联操作中发挥作用。 1.inverse属性:inverse所描述的是对象之间关联关系的维护方式。 inverse只存在于集合标记的元素中。Hibernate提供的集合元素包括<set/> <map/> <list/> <array /> <bag /> Inverse属性的作用是:是否将对集合对象的修改反映到数据库中。 inverse属性的默认值为false,表示对集合对象的修改会被反映到数据库中 inverse=”true”  表示对集合对象的修改不会被反映到数据库中。 <one-to-many>中inverse的属性的设置
例:Person中包含一个Child集合,Child包含一个Person对象。
要求:新建Person和Child对象,Child属于此Person对象
分析:在数据库中,就是新增一条Child记录
    //one-to-many的inverse的配置 public void testInverse() {
       Qx qx = new Qx();
       qx.setQx("天山区");
       Jd jd = new Jd();
       jd.setJd("人民路");
       qx.getJds().add(jd);
       jd.setQx(qx); super.add(qx); super.add(jd);
}
配置Inverse=”false”,Hibernate的操作:
(1)Hibernate: insert into TBL_QX (qx) values (?)
(2)Hibernate: insert into TBL_JD (jd, qxid) values (?, ?)
(3)Hibernate: update TBL_JD set qxid=? where jdid=?
配置Inverse=”true”,Hibernate的操作
(1)Hibernate: insert into TBL_QX (qx) values (?)
(2)Hibernate: insert into TBL_JD (jd, qxid) values (?, ?)
可以看出:Inverse=”true”,SQL少执行一条更新操作(Java代码不会少) <many-to-many>中inverse的属性的设置
在多对多的关系中,可以在关联的两边都不设置inverse属性(默认的false),那么说明关联的双方都可以维护两个对象之间的关联关系。
注:在设置多对多关系的inverse属性时,不能两个对象都将其设置为true 2.cascade属性 cascade属性的作用是描述关联对象进行操作时的级联特性。因此,只有涉及到关系的元素才有cascade属性。
具有cascade属性的标记包括<many-to-one /> <one-to-one /> <any /> <set /><bag /> <idbag /> <list /> <array />
注意:<ont-to-many />和 <many-to-many />是用在集合标记内部的,所以是不需要cascade属性的。
级联操作:指当主控方执行某项操作时,是否要对被关联方也执行相同的操作。 3.inverse和cascade的区别
作用的范围不同:     Inverse是设置在集合元素中的。    Cascade对于所有涉及到关联的元素都有效。    <many-to-one/><ont-to-many/>没有inverse属性,但有cascade属性
执行的策略不同    Inverse 会首先判断集合的变化情况,然后针对变化执行相应的处理。    Cascade 是直接对集合中每个元素执行相应的处理
执行的时机不同     Inverse是在执行SQL语句之前判断是否要执行该SQL语句     Cascade则在主控方发生操作时用来判断是否要进行级联操作
执行的目标不同     Inverse对于<ont-to-many>和<many-to-many>处理方式不相同。
  对于<ont-to-many>,inverse所处理的是对被关联表进行修改操作。
  对于<many-to-many>,inverse所处理的则是中间关联表     Cascade不会区分这两种关系的差别,所做的操作都是针对被关联的对象。
总结: <one-to-many>中,建议inverse=”true”,由“many”方来进行关联关系的维护 <many-to-many>中,只设置其中一方inverse=”false”,或双方都不设置 Cascade,通常情况下都不会使用。特别是删除,一定要慎重

Hibernate中Inverse和Cascade相关推荐

  1. Hibernate中inverse属性与cascade属性

    Hibernate集合映射中,经常会使用到"inverse"和"cascade"这两个属性.对于我这样,Hibernate接触不深和语文水平够烂的种种因素,发现 ...

  2. 关于Hibernate中inverse=true的转载

    1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所 ...

  3. 在 Hibernate 中inverse的属性

    hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的. inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联 由对方控制. 见例子 ...

  4. java inverse_简要分析java中inverse和cascade有何区别

    在java开发的过程中,inverse和cascade的作用或许有些人比较清楚,而另外有的人感到陌生,究竟两者之间有没有关系?正如它们又都能影响对象关联关系的维护,所以将这两个属性的作用区分开也不是很 ...

  5. Hibernate【inverse和cascade属性】知识要点

    Inverse属性 Inverse属性:表示控制权是否转移.. true:控制权已转移[当前一方没有控制权] false:控制权没有转移[当前一方有控制权] Inverse属性,是在维护关联关系的时候 ...

  6. Hibernate关键字inverse和cascade

    2019独角兽企业重金招聘Python工程师标准>>> 维护关联关系中,是否设置inverse属性: 1. 保存数据                  有影响. 如果设置控制反转,即 ...

  7. 关于hibernate中invers跟cascade的一点看法

    下午动手配了下一个简单的双向一对多关系 一下子居然想不起invers跟cascade的区别了 看了网上那些东西觉得更迷茫了 说invers是维护2个表之间的关系的 但是cascade也是2个表的级联操 ...

  8. hibernate中inverse作用

    默认 inverse="false"即该元素指向的类负责维护该关系. 如: <hibernate-mapping> <class name="com.h ...

  9. Hibernate中的级联策略和object references an unsaved transient instance - save the transient instance before

    本片博文整理关于Hibernate中级联策略cascade和它导致的异常: Exception in thread "main" org.hibernate.TransientOb ...

最新文章

  1. Python 统计列表中元素出现的次数
  2. vant coupon 时间戳如何计算_计软考研双日练 | 如何计算拓扑排序算法的时间复杂度?...
  3. 排个课表学会了拓扑排序!有点意思
  4. 《Hadoop MapReduce实战手册》一1.4 给WordCount MapReduce程序增加combiner步骤
  5. ssh连接阿里云服务器遇到的坑
  6. php chr 乱码,php chr() ord()中文截取乱码问题解决方法_PHP教程
  7. 4-1 AlexNet神经网络
  8. 【编程珠玑】第十章 节省空间
  9. PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则
  10. LevelDB源码之五Current文件\Manifest文件\版本信息
  11. 阿里开源框架Jarslink1.6.1新特性
  12. 计算机开机无法定位,开机提示无法定位程序输入点...于动态链接库CommFunc.dll上...
  13. 使用直播网站源码,搭建直播平台的最难点
  14. tomcat内存溢出:PermGen space解决方法
  15. 基于支持向量机的图像分类系统(MATLAB GUI界面版)
  16. html5一个圆圈旋转,Javascript实现可旋转的圆圈实例代码
  17. AR涂涂乐⭐三、 C#实现识别图进入扫描框显示绿色,未进入为红色功能
  18. 有一牧场,已知养牛27头,6天把草吃尽;养牛23头,9天把草吃尽。如果养牛21头,那么几天能把牧场上的草吃尽呢?并且牧场上的草是不断生长的。
  19. 神舟笔记本电脑降低声音
  20. 苹果平板的笔有必要买吗?适用于苹果平板的手写笔推荐

热门文章

  1. QT的QFileDialog类的使用
  2. C++Opengl绘制三角形源码
  3. c++标准I/O输出流
  4. 经典C语言程序100例之八七
  5. 海外对鸿蒙的态度,谷歌、三星挑明态度,国内厂商集体拒绝鸿蒙?任正非将如何应对?...
  6. 怎么查看linux挂载的硬盘,如何查看Linux服务器已挂载的硬盘
  7. java个人介绍代码_个人项目WC(Java)
  8. 'gbk' codec can't decode byte 0x80 in position的一个解决办法
  9. Freemarker中如何遍历List
  10. Android与服务进程内通信