`
baobeituping
  • 浏览: 1068429 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Hibernate 中cascade的用法

阅读更多

实例team和student

team.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.vo.Team" table="team" catalog="test" lazy="true">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" >
               
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="Name" />
        </property>
        <set name="students" inverse="false" cascade="save-update" lazy="true" >
            <key column="teamID"></key>
            <one-to-many class="com.vo.Student"></one-to-many>
        </set>
    </class>
</hibernate-mapping>

student.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.vo.Student" table="student" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" >
               
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="Name" />
        </property>
        

<!-- 暂时把这段去掉,那么对于TEAM和STUDENT就是单向关联了。而且在TEAM里面设置的inverse是false表示由student去主导

        <many-to-one name="teamID" column="TeamID" cascade="all" fetch="join"></many-to-one>
 -->
     
        <one-to-one name="cardID" class="com.vo.Card" lazy="false" fetch="join"></one-to-one>
       
    </class>
</hibernate-mapping>

客户端代码:

Session session = SessionUtil.getSession();
  Transaction tran = session.beginTransaction();
  Student stu = new Student();
  stu.setName("风云");
  
  Team team = (Team)session.get(Team.class, 3);
  Student removestu = (Student)session.get(Student.class, 4);
 team.getStudents().remove(removestu); 

 team.getStudents().add(stu);
   
  tran.commit();
  session.close();

 

1.cascade=none

如果在team.hbm.xml中配置该元素,那么在保存team.getStudents().add(stu);
的时候会抛出异常,提示要我们先把临时对象STUDENT先变为持久对象。

2.cascade=save-update

改成该标记的话,就会保存student对象,但是出现个问题,student保存后,他的外键teamID为空,原因是student的双向关联many-to-one没有配置,所以系统是不知道外键值的,所以插入了一个空,而对于要删除的对象team.getStudents().remove(removestu); 只是把该学生对象的外键更新为NULL。

解决方式,在学生端添加双向关联。就可以正确保存学生对象。

3.cascade=delete

配置该标签,当删除team对象的时候会将与该team相关的所有student全部删除。

4.cascade=delete-orphan

配置该标签的话,在该例子中,我们删除的学生对象就不会设置外键为NULL了,而是直接删除该学生对象。

 

分享到:
评论

相关推荐

    hibernate cascade 测试demo

    本测试Demo主要目的是帮助我们理解如何在Hibernate中使用`cascade`属性来处理关联对象的数据操作。让我们深入探讨一下`cascade`的含义及其在实际开发中的应用。 `cascade`在Hibernate中的作用是当对一个实体进行...

    hibernate 级联(cascade和inverse)一对多

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

    hibernate inverse和cascade的详细讲解

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

    详解Hibernate cascade级联属性的CascadeType的用法

    详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) 级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须...

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

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

    hibernate_reference中文版和Hibernate中文手册

    《Hibernate参考指南中文版》与《Hibernate中文手册》是学习Java领域中ORM(对象关系映射)框架Hibernate的重要参考资料。Hibernate作为一个开源的、强大的持久化框架,极大地简化了数据库操作,使得开发人员能够以...

    cascade用法

    在对象关系映射(ORM)框架中,如Hibernate,`cascade`属性是一个非常重要的概念,它定义了在处理一个实体时如何自动处理与其关联的其他实体。`cascade`属性主要用于控制数据操作的传播,比如当你对一个实体进行保存...

    inverse和cascade使用阐述

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

    java Hibernate 中文API文档

    这个中文API文档是开发者在使用Hibernate进行开发时的重要参考资料,提供了详细的类、接口和方法描述,使得理解并应用Hibernate更加容易。下面将详细阐述Hibernate的核心概念和主要功能。 1. **对象关系映射(ORM)...

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

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

    hibernate annotation 中文文档

    《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...

    Hibernate开发租房系统2 源码

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

    hibernate 全面中文帮助 CHM文档

    Hibernate 是Java领域中最为广泛使用的ORM框架之一,它通过XML或注解方式定义对象与数据库表之间的映射关系,实现了对象模型与关系数据库的解耦。通过Hibernate,开发者可以避免编写大量的JDBC代码,提高开发效率,...

    Hibernate4中文帮助文档(中文教程)

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作与对象模型进行松耦合,使得在Java应用中处理数据库变得更加简单。本教程基于Hibernate4,是IT技术人员精心翻译的中文帮助文档,旨在...

    Hibernate DOC 中文文档

    在映射配置中,可以设置属性的cascade属性,实现对象间的级联操作,如级联保存、级联删除等,简化开发过程。 **八、缓存机制** Hibernate提供了第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别...

    hibernate中文手册PDF

    《Hibernate中文手册》是针对Java开发者的一份重要参考资料,它详细介绍了Hibernate这一持久化框架的使用方法和核心概念。Hibernate作为一个强大的对象关系映射(ORM)工具,它极大地简化了数据库操作,使得开发者...

    Hibernate_3.2.0_Reference_zh_CN.rar hibernate中文api

    7. **事务(Transaction)**:在Hibernate中,事务处理是通过`Transaction`接口实现的,它提供了开始、提交、回滚等方法。 8. **查询语言(HQL)**:Hibernate Query Language,类似SQL,但面向对象,用于查询持久...

    Hibernate中文帮助文档

    Hibernate还提供了许多高级特性,如级联操作(Cascade)、集合的排序和分页(Sort和Criteria API)、投影(Projections)以及事件监听器(Listeners)等,以满足不同场景的需求。 总之,“Hibernate中文帮助文档”...

    Hibernate 3.3 core API

    5. Entity类和持久化:在Hibernate中,实体类代表数据库中的表,通过在类上使用@Entity注解进行标记,并使用@Id注解指定主键字段。持久化操作包括持久化对象(persist)、加载对象(load)、更新对象(update)和...

Global site tag (gtag.js) - Google Analytics