`
crazycat03
  • 浏览: 175566 次
  • 性别: Icon_minigender_2
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

hibernate 一对多(one to many)级联删除

阅读更多

我这里说的是一对多单向级联删除,其他需要级联的相应修改cascade即可

 

以Order和Item为例

1 bean 类

public class Order implements java.io.Serializable {

 

private Set items = new HashSet(0);

 

相应的get,set方法

}

 

public class Item implements java.io.Serializable {

 

private Order order; 

相应的get,set方法

}

 

2 配置文件

 

<set name="items" lazy="true" inverse="true" cascade="delete">
           <key>
                <column name="ORDERID" length="20" not-null="true" />
            </key>
           <one-to-many class="Item"/>
  </set>

 

 

       <many-to-one name="order" class="Order" cascade="none">
            <column name="ORDERID" length="20" not-null="true" />
        </many-to-one>

 

3 service保存

//级联删除item表里的相关数据

 

public void deleteOrder(String orderid){
  Order order= (Order)this.getEntity(orderid);
  Session session=this.getDao().getSessionFactory().openSession();
  session.load(order, orderid);
  session.delete(order);
  session.flush();
 }

 

这样就可以级联删除了,以前做过放在同一个事务中也可以级联删除,但是直接用dao.delete(obj)就会报错


org.springframework.orm.hibernate3.HibernateSystemException: Illegal attempt to associate a collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions

 

希望有所帮助,我也是调了好长时间

 

分享到:
评论
1 楼 ynstudio 2009-08-02  
有个方法或许可以解决,但我不知道是否合适


1、设为true
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>

2、然后配置spring事务管理,这个不完整,你可以方便的在网上找到相关内容
    <tx:advice id="txAdvice">
        <tx:attributes>
            <!-- Read-only commented out to make things easier for end-users -->
            <!-- http://issues.appfuse.org/browse/APF-556 -->
            <!--tx:method name="get*" read-only="true"/-->
            <tx:method name="find*" read-only="true"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="paginate*" read-only="true"/>
            <tx:method name="search*" read-only="true"/>
            <tx:method name="*"/>
            <tx:method name="save*" rollback-for="Exception"/>
            <tx:method name="delete*" rollback-for="Exception"/>
            <tx:method name="remove*" rollback-for="Exception"/>
        </tx:attributes>
    </tx:advice>

相关推荐

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

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    Hibernate one-to-many / many-to-one关系映射

    一、一对一(one-to-one)与一对多(one-to-many)关系 1. 一对一关系: 在现实世界中,如一个人只有一个身份证,这就是典型的"一对一"关系。在Hibernate中,可以通过@OneToOne注解实现。这种关系通常需要使用外键...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,通过不同的注解或者XML配置来表示这些关系。其中,`many-to-one`(多对一)关系是较为常见的一...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    Hibernate的级联操作(增,删,该)

    例如,在一对多关系中,如果我们向父实体的集合属性添加了一个新对象,那么在调用`save()`或`persist()`方法时,这个新对象也会被持久化。 2. 级联删除(Cascade Type.REMOVE) 当设置为`CascadeType.REMOVE`时,...

    hibernate_1700_one2many_many2one_bi_crud(5)

    标题中的“hibernate_1700_one2many_many2one_bi_crud(5)”指的是一项关于Hibernate框架的教程,重点在于介绍一对多(One-to-Many)和多对一(Many-to-One)双向关联关系的创建、读取、更新和删除(CRUD)操作。...

    hibernate 级联(cascade和inverse)一对多

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

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    Hibernate一对一,一对多,多对多实例

    本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...

    hiberante - one to many - update

    标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...

    hibernate一对多案例

    在Java的持久化框架中,Hibernate是一个非常重要的...需要注意的是,处理一对多关系时要合理配置级联操作和缓存策略,以避免性能问题和数据一致性风险。此外,还要根据实际需求选择合适的关联方向和是否添加外键约束。

    Spring+Hibernate一对多关联映射---部门与员工表的级联添加

    本教程将深入探讨Spring和Hibernate结合使用时的一对多关联映射,特别是部门与员工表的级联添加。 在数据库设计中,一对多关联是一个常见的关系类型,例如一个部门可以有多名员工,但每个员工只能属于一个部门。在...

    关于Hibernate级联删除的问题.doc

    在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一(one-to-one)的关系。例如,A表与AA表是一对多关系,而A表与B表是一对一关系,B表与BB表也是一对多关系。 在Hibernate的映射...

    hibernate(一对多,多对一映射)操作

    这种关系在数据库中可以表现为一对多(One-to-Many)或多对一(Many-to-One)的关系。 1. 一对多映射(One-to-Many): 在这种关系中,一个实体(父实体)可以与多个其他实体(子实体)相关联。在Hibernate中,...

    hibernate一对多代码

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

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

    在Java的持久化框架Hibernate中,一对多(Many-to-One)和多对一(One-to-Many)的关系映射是数据库关系模型中的常见关联类型。本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和...

    Hibernate一对多映射

    本文将深入探讨Hibernate一对多映射的概念、配置以及实现方式,并结合提供的源代码和测试代码进行详细解析。 一、Hibernate一对多映射基础 1. 概念理解: 在数据库中,一对多关系意味着一个实体(如用户)可以...

    hibernate one_to_many

    标题"hibernate one_to_many"意味着我们将讨论如何在Hibernate中配置这种多对一的关系。让我们深入了解一下这个主题。 首先,我们需要在实体类中定义`@OneToMany`注解。这个注解告诉Hibernate,该属性将引用多个...

    hibernate之一对多配置demo

    一、Hibernate一对多关系 在现实世界中,一对多关系很常见,例如一个班级可以有多名学生。在数据库中,这对应于一个表(如班级表)有一条记录可以关联多条记录(如学生表)。在Hibernate中,我们通过配置XML文件来...

Global site tag (gtag.js) - Google Analytics