`
wang_zhi_peng2007
  • 浏览: 251450 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate一对多关联和cascade,inverse的使用

 
阅读更多

 

  cascade:级联,可选值为:none,save-update,delete,all,all-delete-orphan
  inverse: 反转,表示由哪方维护关系false为自己维护,可选值:true,false

<set name="soxAuditConditions" inverse="false" cascade="all-delete-orphan" lazy="false">
            <key>
                <column name="CASE_OBJ_ID" precision="20" scale="0" />
            </key>
            <one-to-many class="com.zte.ict.soc.auditManage.domain.SoxAuditCondition" />
        </set>

     以上配置了: 1,一对多关联;2,“一”方维护关系;3;级联操作并删除孤儿;
  (inverse,cascade不能再“多”方的配置文件<many-to-one.../>中配置)

 

    “一”方更新时放入了一个新的SET,执行saveOrUpdate后“多”方原SET中对象的外键被置空(因为关系由“一”方维护,如果inverse=true,关系由“多”方维护“一”方会关联原SET和新SET),但没有执行删除孤儿的操作( cascade="all-delete-orphan" 已经这样配置了),要删除孤儿的正确操作是: 得到跟新的对象,根据对象ID get(xx.class,id) ,将得到的老对象的关系解除,把新对象的各属性放入老对象,更新成功,并删除了孤儿。

Object old_sac_obj = this.getHibernateTemplate().get(SoxAuditCase.class, soxAuditCase.getObjId());
		
		if(old_sac_obj!=null){//解除关系 更新
			SoxAuditCase old_sac = (SoxAuditCase) old_sac_obj;
			Set<SoxAuditCondition> sacns = old_sac.getSoxAuditConditions();
			Iterator<SoxAuditCondition> it = sacns.iterator();
			//存放要解除关系的对象(即:分组条件)
			Set<SoxAuditCondition> removeCollection = new HashSet<SoxAuditCondition>();
			while(it.hasNext()){
				SoxAuditCondition temp = it.next();
				//old_sac.getSoxAuditConditions().remove(temp);
				removeCollection.add(temp);
				temp.setSoxAuditCase(null);
			}
			old_sac.getSoxAuditConditions().removeAll(removeCollection);
			//更新过的值导入原对象(缓存中的)
			old_sac.setCaseName(soxAuditCase.getCaseName());
			old_sac.setCaseNo(soxAuditCase.getCaseNo());
			old_sac.setDescription(soxAuditCase.getDescription());
			old_sac.getSoxAuditConditions().addAll(soxAuditCase.getSoxAuditConditions());
			this.updateSoxAuditCase(soxAuditCase);
		}else{
			this.getHibernateTemplate().saveOrUpdate(soxAuditCase);
		}

 

 

 

分享到:
评论

相关推荐

    hibernate 级联(cascade和inverse)一对多

    总结,Hibernate的级联和反转特性对于一对多关系的管理至关重要,它们可以简化开发过程,提高数据操作的效率。通过合理配置,可以确保对象关系的正确同步,并利用JUnit进行测试以确保功能的正确性。在实践中,应根据...

    关联映射cascade,inverse讲解

    例如,一个用户可能有多个订单,这种一对多的关系就可以通过关联映射来实现。关联映射可以通过XML配置文件或注解完成,确保对象间的关联能够在数据库层面得到正确的反映。 接下来,我们详细探讨“cascade”。...

    hibernate inverse和cascade的详细讲解

    - **一对多**:假设有一个`Department`部门和多个`Employee`员工的关系,`inverse`属性通常放在`Employee`的映射文件中,并且设置为`false`。这意味着员工表负责维护与部门之间的关联关系。 - **多对多**:例如,...

    Hibernate映射一对多关联关系

    使用Hibernate进行一对多关联关系的映射,主要通过在XML映射文件中定义 `&lt;many-to-one&gt;` 和 `&lt;set&gt;` 标签来实现。 ##### 映射 `Order` 类 ```xml ``` 在上面的映射文件中: - `&lt;many-to-one&gt;` 元素...

    inverse和cascade使用阐述

    在数据库设计中,当我们在两个表之间建立一对多或者多对一的关系时,可能会涉及到“inverse”概念。例如,一个部门可以有多个员工,而一个员工只属于一个部门。这种情况下,员工表通常会有一个外键指向部门表。如果...

    Hibernate中cascade和inverse应用

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

    hibernate 一对多关联

    总结,Hibernate的一对多关联是Java EE开发中不可或缺的一部分,正确理解和使用它可以极大地提高数据操作的便利性和效率。理解其配置、实现细节以及最佳实践,对于优化应用性能和保证数据一致性至关重要。

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

    1. **关联的插入和更新**:在一对多关系中,如果设置`inverse="true"`,那么在保存或更新父实体时,Hibernate会自动处理与子实体的关联,添加新的子实体或更新已存在的关联。相反,如果在子实体上操作,Hibernate将...

    hibernate一对多关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个子实体(如订单)的情况。在本篇文章中,我们将深入探讨如何实现双向关联的一对多映射,以及在...

    Hibernate一对多主键关联映射源代码

    在一对多关联中,你可能会遇到懒加载(lazy loading)和立即加载(eager loading)的问题,以及如何处理级联操作。 在`OneToMany_1`这个文件中,应该包含了具体的源代码示例,包括实体类、映射文件和测试类。通过...

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

    在Hibernate中,`inverse`属性主要用于多对一或一对多的关系中,用于指定哪一方负责维护关系。当两个实体之间存在关联时,如果一方的集合变更,那么另一方的实体可能也需要更新。这时,`inverse`属性就变得尤为重要...

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

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

    hibernate一对多案例

    本案例主要探讨的是Hibernate中的一对多关系映射,这是一种常见的对象关系映射(ORM)配置,用于表示一个实体与多个其他实体之间的关联。 在传统的数据库设计中,一对多关系是指一个表(父表)中的记录可以与另一个...

    Hibernate一对多(多对一)双向关联(annotation/xml)

    - **注解配置**:在双向一对多关联中,一方使用`@ManyToOne`,另一方使用`@OneToMany`并设置`mappedBy`属性。对于多对一,一方用`@OneToOne`,另一方用`@OneToOne(mappedBy = "...")`。 - **XML配置**:需要在双方...

    Hibernate之一对多关联

    在Hibernate中,一对多关联可以使用`@OneToMany`注解或在XML映射文件中配置。假设我们有一个`Department`类(父类)和一个`Employee`类(子类),部门可以包含多个员工,而员工只属于一个部门。 使用注解配置的...

    hibernate一对多代码

    本文将详细解析"hibernate一对多映射"的概念、配置及其实现过程,以帮助理解并掌握这一核心特性。 首先,我们要明白在关系型数据库中,"一对多"关系意味着一个实体(比如一个部门)可以有多个相关实体(如部门下的...

    Hibernate一对多单向关联(annotation/xml)

    1. **在父类的映射文件中**,使用`&lt;one-to-many&gt;`元素声明一对多关联,并通过`class`属性指定子类的全限定类名。 ```xml &lt;hibernate-mapping&gt; &lt;!-- 其他映射 --&gt; &lt;set name="orders" inverse="true" cascade=...

    Hibernate的多对一和一对多操作实例

    - **映射配置**:在`CUSTOMER.hbm.xml`映射文件中,可以看到`&lt;set&gt;`元素用于定义一对多关系,其中`inverse="true"`属性表示反向操作由另一方负责,`lazy="true"`则表示延迟加载,`cascade="all"`意味着当父对象发生...

    hibernate自身关联一对多实例(树形结构)

    一对多关联是Hibernate中常见的关联类型,一个实体可以与多个其他实体相关联,类似于数据库中的外键关系。 在一对多关联中,"一方"实体通常有一个或多个"多方"实体的引用,而"多方"实体则拥有一个对"一方"实体的...

Global site tag (gtag.js) - Google Analytics