关于hibernate中inverse和cascade属性的设置

转载 2011年01月18日 15:57:00

转自:http://www.cnblogs.com/oracleDBA/archive/2009/11/21/1607810.html

 

1.明确inverse和cascade的作用
inverse决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用)。
cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。
2.关于inverse=”true”的使用场合
   前面提到inverse只对one-to-amny和many-to-many起作用。
a.在one-to-many关联关系中,一端的对象中含有集合(集合中的元素是关系另一端的对象),所以inverse属性是在一端的配置文件中设置的。如果将一端的inverse设为false,表示由一端来维护关系表,即当插入、删除、更新一端对象时,触发对关系表的维护(one-to-many的关系表就是多端对应的表,该表中包含外键);如果将一端的inverse设为true,表示由多端来维护关系表,即当插入、删除、更新多端对象时,触发对关系表的维护。在one-to-many的关系中,最好将inverse设为”true”,由多端来维护数据,可以减少操作,提高效率。
b.在many-to-many关联关系中,两端对象中都含有集合,所以两端都要设置inverse属性。inverse属性的默认值为false。在多对多关联关系中,关系的两端inverse不能都设为false,即默认的情况是不对的,如果都设为false,在做插入操作时会导致在关系表中插入两次关系。也不能都设为true,如果都设为true,任何操作都不会触发对关系表的操作。
3.双向one-to-many关联关系中,为什么设置inverse=”true”?
设置inverse=”true”,表示由多端来维护数据。如果要一方维护关 系,就会使在插入或是删除"一"方时去update"多"方的每一个与这个"一"的对象有关系的对象。而如果让"多"方面维护关系时就不会有update 操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。显然这样做的话,会减少很多操作,提高了效率。
注:
      单向one-to-many关联关系中,不可以设置inverse="true",因为被控方的映射文件中没有主控方的信息。
    利用"one-to-many" 和 "many-to-one"实现双向one-to-many关联关系。
4.操作建议
  一般对many-to-one和many-to-many不设置级联,这要看业务逻辑的需要;对one-to-one和one-to-many设置级联。
  many-to-many关联关系中,一端设置inverse=”false”,另一端设置为inverse=”true”。在one-to-many关联关系中,设置inverse=”true”,由多端来维护关系表。

相关文章推荐

Hibernate关于inverse与cascade属性的一些理解

1.inverse 网上关于inverse的理解大都是决定主表还是从表维护关系,但这实在有点抽象,经过进行实验观察sql语句终于有了一下理解。

hibernate属性设置cascade和inverse

cascade是级联操作,使得在操作一端数据时,可以级联操作被关联的另一端的数据。 在多对一的关系中,多的一端不能操作级联为delete。一般在多的一端设为save-update。 在一对多的关系...

Hibernate---inverse,cascade(1)

背景:项目中长期使用,却并没有整理,抽出零碎时间将其整理如下,以供大家参考。   首先对下面两个类做一个说明: seal对象,BranchInfo对象,两者是多对一关系,一个分支机构可以有多个s...

hibernate集合映射inverse和cascade详解

1、到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有cascad...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)