cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有cascade的关系就会被自己动的插入或是删除。

Hibernate有许多值得学习的当地,这儿咱们首要介绍两个方面,包含介绍cascade和inverse方面。

归纳Hibernate中cascade和inverse(hibernate cascade属性)  cascade和inverse Hibernate 第1张


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界说的是联系和目标的级联联系。

以上是对Hibernate中cascade和inverse的简略了解,期望我们看后有所收成。

【修改引荐】

  1. Hibernate DAO类概述
  2. 必读.NET常见问题汇总
  3. Hibernate的一些根本用法
  4. Hibernate XML格局剖析
  5. Hibernate ORM功用概述
转载请说明出处
知优网 » 归纳Hibernate中cascade和inverse(hibernate cascade属性)

发表评论

您需要后才能发表评论