Hibernate中Inverse和Cascade

简介:
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,通常情况下都不会使用。特别是删除,一定要慎重



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911934.html,如需转载请自行联系原作者

目录
相关文章
|
SQL Java 数据库连接
Hibernate【inverse和cascade属性】知识要点
Hibernate【inverse和cascade属性】知识要点
160 0
Hibernate【inverse和cascade属性】知识要点
|
缓存 Java 数据库连接
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
128 0
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
|
Java 数据库连接
hibernate 中的 inverse情况
hibernate 中的 inverse情况
83 0
|
SQL 存储 缓存
hibernate(六) cascade(级联)和inverse关系详解
写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也看不懂其中的关系,所以我自己写博文的时候,会尽量用通俗通俗在通俗的语言去描述一个概念,希望能尽自己的力量去帮助你们理解。光看我的是不行的,最关键的是要自己动手去实践一遍,能得出一样的结论,那就说明懂了,在我不懂的时候,我就去自己实现它,一次次尝试,慢慢的就总结出规律了。
137 0
|
SQL Java 数据库连接
|
Java 数据库连接
Hibernate Inverse属性
inverse属性: 在one方的一对多关联中设置inverse属性为true,则表示由多方来维护关联关系,这有助于性能的改善; 不设置该属性的话双方都会维护关联关系 eg: 响性能。
|
Java 数据库连接
hibernate笔记--cascade级联以及inverse属性
cascade :    不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例,此标签下都有一个cascade属性:   Grade.
791 0
|
Java 数据库连接 数据库
一口一口吃掉Hibernate(八)——Hibernate中inverse的用法
        一、Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录!         Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。
1110 0
|
7月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate

热门文章

最新文章