`
flytreeleft
  • 浏览: 93263 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

hibernate中cascade和inverse的使用

阅读更多

在hibernate中,一对多和多对多时会涉及到cascade和inverse两个属性,其中cascade表示哪些操作需要级联到关联对象,inverse表示是否由另一方自动维护数据库关联。

一、
级联指的是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作。主控方即为cascade所在映射文件所对应的对象。

一个操作因级联cascade可能触发多个关联操作。前一个操作叫“主控操作”,后一个操作叫“关联操作”。
cascade属性的可选值:
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。 

具体执行什么“关联操作”是根据“主控操作”来的:
“主控操作” “关联操作”
session.saveOrUpdate --> session.saveOrUpdate (执行saveOrUpdate实际上会执行save或者update)
session.save ----> session.saveOrUpdate
session.udpate --> session.saveOrUpdate
session.delete --> session.delete

二、
inverse为false表示由本对象维护关联关系,为true表示由对方维护关联关系。

三、
inverse对集合对象整体起作用,cascade对集合对象中的一个一个元素起作用,如果集合为空,那么cascade不会引发关联操作。

四、
比如有如下的映射关系:
A.hbm.xml:
<set name="bs" table="A_Btable" cascade="none" inverse="false" lazy="true">
<key column="A_NO" /> 
<many-to-many column="B_NO" class="B" />
</set>
B.hbm.xml:
<set name="as" table="A_Btable" cascade="none" inverse="false" lazy="true">
<key column="B_NO" />
<many-to-many column="A_NO" class="A" />
</set>
由映射文件可知A和B中都分别含有对方的对象集合,分别为bs和as,这是一个双向多对多映射。
cascade为none表示在对A的对象进行操作时,并不对bs集合中的每个对象进行相应的操作,如果为all,则表示在对A进行操作时需对bs中的每个对象进行相应的关联操作(对应操作见一)。在对bs中的对象进行级联操作时也会根据B中设置的映射关系对as中的对象进行所设置的关联操作。
inverse为false表示在A对象进行更新的同时也要维护A与B之间的关系,即对A_Btable进行相应的更新,否则不对A_Btable进行更新。在多对多或多对一的映射中必须要有一方维护关联关系,否则,就得显示地进行维护,这可能会带来麻烦。

特别需要注意的是若双方都设置为“cascade=all inverse=false”,最严重时会造成A表、B表和A_Btable表中数据全部丢失。

五、
inverse只对set+one-to-many(或many-to-many)有效,对many-to-one, one-to-one无效。cascade对关系标记都有效

inverse 对set + one-to-many 和 set + many-to-many 起的作用不同。hibernate生成的sql不同。
对one-to-many,hibernate对many方的数据库表(不是连接表,一般情况下也没有)执行update语句。
对many-to-many, hibernate对关系表执行insert/update/delte语句,注意不是对many方的数据库表而是关系表(即所谓的连接表)。

cascase 对<set>都是一致的,不管one-to-many还是many-to-many。都简单地把操作传递到set中的每个元素。所以它总是更新many
方的数据库表。

分享到:
评论

相关推荐

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade和inverse应用

    在 Hibernate 框架中,`cascade` 和 `inverse` 是两个重要的概念,它们主要用于管理对象之间的持久化关系,特别是涉及到一对一(one-to-one)、一对多(one-to-many)和多对多(many-to-many)关系时。这两个属性都...

    hibernate 级联(cascade和inverse)一对多

    在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...

    hibernate inverse和cascade的详细讲解

    ### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...

    inverse和cascade使用阐述

    至于博文链接,虽然没有提供具体内容,但可以推测博主可能详细讲解了在特定工具或框架中如何配置和使用“inverse”和“cascade”,并可能给出了一些示例和最佳实践。 在压缩包文件“inverse_cascade”中,可能包含...

    Hibernate中Inverse和Cascade的区别.html

    Hibernate中Inverse和Cascade的区别.html

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    关联映射cascade,inverse讲解

    本篇将深入讲解“cascade”和“inverse”这两个重要的概念,以及它们在实际应用中的作用。 首先,让我们理解一下“关联映射”。在Hibernate中,关联映射允许我们将Java对象与数据库表的记录进行关联。例如,一个...

    关于cascade和inverse属性[文].pdf

    在软件网络技术领域,尤其是在使用Hibernate这种对象关系映射(ORM)框架时,理解和正确使用`cascade`和`inverse`属性至关重要。这两个属性主要用于管理对象之间的关联关系,特别是如何在数据库中维护这些关系。 ...

    hibernate集合映射inverse和cascade详解.txt

    `inverse`和`cascade`属性是Hibernate集合映射中非常重要的概念,它们帮助开发者更灵活地控制实体之间的关系以及操作的级联行为。合理地使用这两个属性,不仅可以简化代码,还能提高程序的性能和健壮性。然而,不当...

    hibernate_配置cascade_及all-delete-orphan.doc

    在使用Hibernate时,正确选择和配置cascade选项对于高效地管理和维护实体之间的关系至关重要。通过了解不同选项的特点和应用场景,开发人员可以更加灵活地应对各种业务需求,同时也能够有效地避免潜在的数据一致性...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    综上所述,理解并正确使用Hibernate中的`inverse`属性对于优化JavaEE应用的数据库操作和提高代码质量具有重要意义。通过深入掌握这一特性,开发者能够更好地管理对象之间的关联,提升应用的性能和稳定性。

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    Hibernate开发租房系统2 源码

    描述提到“使用cascade和inverse优化区和街道关联关系”,这意味着我们将深入理解Hibernate的cascade和inverse属性,以及它们在双向一对多关联关系中的应用。 Hibernate是Java领域中广泛使用的对象关系映射(ORM)...

    Hibenate cascade

    在Hibernate中,`cascade`和`inverse`是两个重要的概念,它们涉及到对象之间的关系管理和数据持久化。 **1. Hibernate Cascade** `cascade`属性主要用于控制对象间的级联操作。当在主对象上执行保存、更新、删除等...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    Hibernate常见问题

    理解并正确使用Hibernate的`cascade`和`inverse`属性对于优化数据操作和避免数据一致性问题至关重要。在实际开发中,应根据业务逻辑和数据模型谨慎设定这些属性,以确保数据操作的正确性和高效性。

    inverse 例子

    在Hibernate这个强大的对象关系映射(ORM)框架中,`inverse`属性是一个非常...在实际开发中,应根据业务需求和性能考虑来决定是否使用`inverse`以及如何设置。记住,良好的设计和合理的ORM配置是提高应用效率的关键。

Global site tag (gtag.js) - Google Analytics