`

十五 cascade 级联操作与inverse表是否放弃维护关联关系

 
阅读更多
cascade 级联操作字段 
Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:
none,all,save-update ,delete, lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many) 。一般对many-to-one,many-to-many不设置级联,
在<one-to-one>和<one-to-many>中设置级联

应用的例子
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<set name="ems" cascade="save-update,delete">
		<!-- 关联关系的外键  -->
		<key column="depaer_id"/>
		   <!-- 关联关系的实体类配置 -->
		  <one-to-many  class="Employee" />
		</set>
	</class>
	
</hibernate-mapping>

应用场景:根据业务需求,比如说老师和学生是多对多的关系,如果把一个老师给开除了,是不是要把
学生给开除了呢?还有一个公司,如果公司撤销了一个部门,是不是要把这个部门的员工全都开除了呢 


inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),
在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;
该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。
one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。
注: 配置成one-to-one的对象不维护关联关系

inverse="true" 设置在one的一方,表示放弃级联操作 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<set name="ems" cascade="save-update,delete" inverse="true">
		<!-- 关联关系的外键  -->
		<key column="depaer_id"/>
		   <!-- 关联关系的实体类配置 -->
		  <one-to-many  class="Employee" />
		</set>
	</class>
	
</hibernate-mapping>

这时cascade设置就失去意义了,因为inverse设置为true,就表示主表实体放弃了级联维护
inverse不能再有序的集合中使用,因为在有序的集合里,hibernate对关联关系的实体的维护都已经失效了
那还维护什么顺序呢 
例如
<list name="ems" inverse="true">
<key column="depaer_id"/>
<!-- 这一列指定其记录顺序 这一列由hibernate来使用  -->
<list-index column="ol"/>
<one-to-many class="Employee"/>
</list>
这里已经设置为inverse="true" 那么就放弃了级联关系的维护 
其实对级联关系的维护,其实就是更新其外键,现在它对它对应的一方已经不在维护其关系
那还维护这个顺序吗?当然不会了。所以,在有序的集合的关联关系实体中,不可以使用inverse="true"


end 完毕!

 

分享到:
评论

相关推荐

    hibernate 级联(cascade和inverse)一对多

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

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

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

    关联映射cascade,inverse讲解

    在Java持久化框架Hibernate中,关联映射是数据库表之间的关系在对象模型中的体现,它使得我们可以方便地处理对象与数据库之间的数据交互。本篇将深入讲解“cascade”和“inverse”这两个重要的概念,以及它们在实际...

    hibernate inverse和cascade的详细讲解

    它们主要用于控制对象之间关联关系的维护以及操作的级联行为。本文将详细介绍这两个属性的概念、作用以及应用场景,并通过示例来帮助读者更好地理解它们的工作原理。 #### 二、Inverse 属性详解 `inverse`属性主要...

    Hibernate中cascade与inverse属性详解.doc

    在Hibernate中,`cascade`和`inverse`是两个非常重要的属性,它们主要涉及到对象关系映射(ORM)中的数据同步和关联管理。首先,我们来分别解析这两个属性的含义和作用。 `cascade`属性用于控制当操作一个实体(如...

    Hibernate中cascade和inverse应用

    `cascade` 属性主要用于定义当一个实体被持久化(保存、更新或删除)时,是否将这些操作“级联”到与其关联的其他实体上。这使得在处理对象图时,能够简化操作,避免手动处理相关联对象的持久化状态。级联操作主要有...

    inverse和cascade使用阐述

    在数据库关系中,“cascade”意味着一个操作(如更新、删除)不仅会影响主记录,还会影响与之相关联的所有子记录。比如,如果部门被删除,而设置的外键约束为“cascade”,那么所有属于该部门的员工记录也会被删除。...

    NHibernate Inverse & Cascade

    Cascade属性涉及到对象间的级联操作,它定义了当一个对象被持久化、更新、删除时,其关联对象应该如何处理。这为开发者提供了便利,可以避免编写大量手动管理关联对象的代码。 有多种级联选项: 1. **none**:...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

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

    总结起来,`cascade`和`inverse`是Hibernate中用于管理对象关联关系的重要属性,它们共同确保了数据的一致性和操作的便捷性。在实际应用中,需要根据业务逻辑和性能需求,合理设置这两个属性,以达到最佳的数据库...

    级联增删改查

    首先,"级联"(Cascade)操作是在数据库关系模型中,当对一个表中的记录进行添加、删除或修改时,会影响到与其相关的其他表中的记录。例如,在一对多或者多对多的关系中,如果删除了一个父记录,而这个父记录与多...

    Hibenate cascade

    当在主对象上执行保存、更新、删除等操作时,是否将这些操作“级联”到与之关联的子对象。例如,如果你有一个`Student`类,它与`Teacher`类有一对多的关系,并且`Student`包含在`Teacher`中,设置`cascade`属性可以...

    Hibernate 一对多、多对一、级联、加载、反转

    如果在`User`和`Order`的关系中,我们希望由`User`来控制级联操作,可以将`@OneToMany`的`mappedBy`属性设在`User`上,然后设置`inverse`属性为`true`,使得`User`成为关系的主控方,这样在处理`User`时,级联操作会...

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

    `cascade`定义了关联实体的操作是否应级联到另一端。例如,`cascade="save-update"`意味着当父实体被保存或更新时,其关联的子实体也会随之保存或更新。不过,`inverse`属性并不直接影响级联行为,它只是控制关联的...

    inverse=true的总结

    在`inverse=true`的情况下,级联操作通常在“负责”维护关联的那一方执行。 5. 源码分析:深入理解`inverse=true`的工作原理,需要查看Hibernate的源码。这涉及到Hibernate如何在持久化过程中处理关联对象,以及...

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

    在Hibernate中,当执行某些操作(如保存、删除或更新)时,可以使用`cascade`来决定这些操作是否应该级联到关联的实体上。 #### 1. `cascade`的类型 - `CascadeType.PERSIST`:允许在保存父实体时,自动保存关联的...

    Hibernate映射一对多关联关系

    - `inverse` 设置是否反转该关联关系。 - `cascade` 定义级联行为。 - `lazy` 控制延迟加载机制。 - `&lt;key&gt;` 元素定义外键。 - `&lt;one-to-many&gt;` 元素指定集合中的元素类型。 #### 五、API操作 利用Hibernate API...

    Hibernate常见问题

    `cascade`决定了一个对象的变更是否会影响到其他关联对象,`inverse`则决定了关系的维护责任在哪个对象。 4. **ObjectDeletedException**:当尝试删除一个已被其他对象级联保存的对象时,会出现这个异常。例如,...

    hibernate外键实现一对一单向关联关系源码

    **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能只有一个护照,或者一个员工只有一个职位。在Hibernate中,这种关系可以通过外键(Foreign Key)在一方或双方实体中实现。 **...

    Hibernate关联关系疑问

    6. **级联操作(Cascades)**:通过设置cascade属性,可以控制一个实体的生命周期操作(如保存、更新、删除)是否影响到其关联的实体。谨慎使用,因为不当设置可能会导致数据意外丢失。 7. **反向关联(Inverse)**...

Global site tag (gtag.js) - Google Analytics