1、到底在哪用cascade="..."?

cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有cascade的关系就会被自己动的插入或是删除。便是为了能正确的cascade,unsaved-value是个很重要的属性。Hibernate通过这个属性来判断一个对象应该save还是update,如果这个对象的id是unsaved-value的话,那说明这个对象不是persistence object要save(insert);如果id是非unsaved-value的话,那说明这个对象是persistence object(数据库中已存在),只要update就行了。saveOrUpdate方法用的也是这个机制。

2、到底在哪用inverse="ture"?

inverse属性默认是false的,就是说关系的两端都来维护关系。这个意思就是说,如有一个Student, Teacher和TeacherStudent表,Student和Teacher是多对多对多关系,这个关系由TeacherStudent这个表来表现。那么什么时候插入或删除TeacherStudent表中的记录来维护关系呢?在用hibernate时,我们不会显示的对TeacherStudent表做操作。对TeacherStudent的操作是hibernate帮我们做的。hibernate就是看hbm文件中指定的是"谁"维护关系,那个在插入或删除"谁"时,就会处发对关系表的操作。前提是"谁"这个对象已经知道这个关系了,就是说关系另一头的对象已经set或是add到"谁"这个对象里来了。前面说过inverse默认是false,就是关系的两端都维护关系,对其中任一个操作都会处发对表系表的操作。当在关系的一头,如Student中的bag或set中用了inverse="true"时,那就代表关系是由另一关维护的(Teacher)。就是说当这插入Student时,不会操作TeacherStudent表,即使Student已经知道了关系。只有当Teacher插入或删除时才会处发对关系表的操作。所以,当关系的两头都用inverse="true"是不对的,就会导致任何操作都不处发对关系表的操作。当两端都是inverse="false"或是default值是,在代码对关系显示的维护也是不对的,会导致在关系表中插入两次关系。

在一对多关系中inverse就更有意义了。在多对多中,在哪端inverse="true"效果差不多(在效率上)。但是在一对多中,如果要一方维护关系,就会使在插入或是删除"一"方时去update"多"方的每一个与这个"一"的对象有关系的对象。而如果让"多"方面维护关系时就不会有update操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。当然这时也要遍历"多"方的每一个对象显示的操作修关系的变化体现到DB中。不管怎样说,还是让"多"方维护关系更直观一些。

3、cascade和inverse有什么区别?

可以这样理解,cascade定义的是关系两端对象到对象的级联关系;而inverse定义的是关系和对象的级联关系。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=741468

详见:http://www.bczs.net/xml/2005/12/21/4473293.xml

http://welcomejianghome.spaces.msn.com/blog/cns!3196CAE67CDF2316!149.entry

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

none:所有情况下均不进行关联操作。这是默认值。

save-update:在执行save/update/saveOrUpdate时进行关联操作。

delete:在执行delete时进行关联操作。

all的意思是save-update + delete

all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点

all比较好理解,举个例子说一下all-delete-orphan:

Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.

举个例子,现items中存两个Item, item1,item2,如果定义关系为all-delete-orphan

当items中删除掉一个item(比如用remove()方法删除item1),那么被删除的Item类实例

将变成孤儿节点,当执行category.update(),或session.flush()时

hibernate同步缓存和数据库,会把数据库中item1对应的记录删掉

转载于:https://www.cnblogs.com/tanglin_boy/archive/2010/01/07/1641323.html

Hibernate中Cascade和Inverse相关推荐

  1. java之hibernate之 cascade和inverse

    1.Cascade是级联动作,在many_to_one中如果使用cascade可以级联操作关联对象,如下代码可以级联保存Category对象. 在Book的映射文件设置 <many-to-one ...

  2. java中的cascade,Hibernate中cascade作用

    只有"关系标记"才有cascade属性: 一个操作因级联cascade可能触发多个关联操作.前一个操作叫"主控操作",后一个操作叫"关联操作" ...

  3. Hibernate中Inverse和Cascade

    Inverse和cascade是Hibernate映射中最难掌握的两个属性.两者都在对象的关联操作中发挥作用. 1.inverse属性:inverse所描述的是对象之间关联关系的维护方式. inver ...

  4. Hibernate中inverse属性与cascade属性

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

  5. Hibernate中ManyToOne删除Many的一方出现 deleted object would be re-saved by cascade

    最近在写SSH整合时出现了 deleted object would be re-saved by cascade这个错误 我的Hibernate关系映射文件如下 <many-to-one na ...

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

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

  7. 在 Hibernate 中inverse的属性

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

  8. mysql cascade的用法_MySql和Hibernate中关于cascade的用法

    数据库里的cascade的用法,Mysql和Hibernate里面是不相同. 在数据库里,进行增加.修改.删除记录的时候,经常会涉及到父子关系的表. 例如:有省份表和城市表,其中城市表有一个外键pro ...

  9. 06章 映射一对多双向关联关系、以及cascade、inverse属性

    当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...

最新文章

  1. SAP WM高阶之2-Step Picking
  2. .NET项目修改文件夹
  3. python——变量的类型、不同类型变量的计算、变量的输入以及格式化输出
  4. 数据库-索引-普通索引-唯一索引
  5. 【Pre蓝桥杯嵌入式】【STM32】学习索引
  6. [转载] Python中产生随机数
  7. 【Numpy基础】矩阵数组相乘与神经网络的实现
  8. auto_ptr scoped_ptr shared_ptr weak_ptr unique_ptr
  9. xm文件转换为mp3_怎么才能将M4A转换为MP3?秘籍公开
  10. 电子相册系统(六)相片列表显示
  11. Read_books_水煮三国
  12. 2018年信息安全大事件一览
  13. Windows电脑上有哪些好用的txt小说阅读器?
  14. 帮忙framebuffer扫盲
  15. 大数据平台架构有哪些
  16. mysql 数组_mysql怎么存数组
  17. 我教女朋友学编程Html系列(6)—Html常用表单控件
  18. 超详细的Mysql安装教程
  19. ip地址映射-方便开发微信公众号,小程序等
  20. 配置大华网络摄像机,并远程存储到FTP服务器

热门文章

  1. JavaScript学习(四十三)—构造方法创建对象的图解和注意事项
  2. php 微信扫码给红包,关于现金红包的详细介绍
  3. r语言调用python_python如何调用R
  4. 牛客SQL22 统计各个部门的工资记录数
  5. 电脑能开机但进不去系统,电脑只能进安全模式怎么处理?
  6. 我们一家三口不和双方父母来往了怎么办?
  7. 一些比较小众的小程序类型,如AI算命,影视视频等
  8. 大学计算机老师说未来不需要程序员,都是机器自动生成代码。老师说估计20年,程序员就会被取代,现实吗?
  9. URI、URL与URN【定义+联系】
  10. 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省