`

hibernate之cascade(一)

 
阅读更多

TrainingStudent.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">
<hibernate-mapping>
    <class name="com.hibernate.entity.TrainingStudent" table="training_student" schema="dbo" catalog="pubs">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="classId" type="java.lang.Integer" insert="false" update="false">
            <column name="class_id" />
        </property>
        <property name="stuName" type="java.lang.String">
            <column name="stu_name" length="50" />
        </property>
        <many-to-one name="trainingClass" class="com.hibernate.entity.TrainingClass" fetch="select" cascade="all" lazy="false" >
	        <column name="class_id" not-null="true"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

 

TrainingClass.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">
<hibernate-mapping>
    <class name="com.hibernate.entity.TrainingClass" table="training_class" schema="dbo" catalog="pubs">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="className" type="java.lang.String">
            <column name="class_name" length="50" />
        </property>
        <set name="trainingStudent" cascade="all">
        	<key column="class_id" not-null="false"></key>
        	<one-to-many class="com.hibernate.entity.TrainingStudent" />
        </set>
    </class>
</hibernate-mapping> 

 

 

package com.hibernate.entity;

import java.util.HashSet;
import java.util.Set;
public class TrainingClass implements java.io.Serializable {

	// Fields

	private Integer id;
	private String className;
	private Set<TrainingStudent> trainingStudent = new HashSet();

	// Constructors

	/** default constructor */
	public TrainingClass() {
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getClassName() {
		return this.className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public Set<TrainingStudent> getTrainingStudent() {
		return trainingStudent;
	}

	public void setTrainingStudent(Set<TrainingStudent> trainingStudent) {
		this.trainingStudent = trainingStudent;
	}

}
 

 

 

package com.hibernate.entity;

public class TrainingStudent implements java.io.Serializable {

	// Fields

	private Integer id;
	private Integer classId;
	private String stuName;
	private TrainingClass trainingClass;

	// Constructors

	/** default constructor */
	public TrainingStudent() {
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getClassId() {
		return this.classId;
	}

	public void setClassId(Integer classId) {
		this.classId = classId;
	}

	public String getStuName() {
		return this.stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public TrainingClass getTrainingClass() {
		return trainingClass;
	}

	public void setTrainingClass(TrainingClass trainingClass) {
		this.trainingClass = trainingClass;
	}

}

 

 以上是例子需要的内容。

one端可以级联修改many端的数据,many端可以级联删除one端。many端可以修改自己数据,但是不能通过many端去修改one端的数据。比如:

 

Session session=HibernateSessionFactory.getSession();

session.beginTransaction();

TrainingStudent ts=(TrainingStudent) session.get(TrainingStudent.class, 6);

ts.setClassId(4);

 

 

ts.setClassId(4);

TrainingClass t1=(TrainingClass) session.get(TrainingClass.class,4);

ts.setTrainingClass(t1);

session.saveOrUpdate(ts);

这样做是允许的,因为它是在修改自身的数据。但是下面这样是不允许的:

ts.getTrainingClass().setId();

因为这是在通过many端去修改one端内部的主键。这样做是不允许的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Hibernate cascade在不同关联关系中的具体表现

    其中,Cascade属性是Hibernate提供的一种强大的功能,它允许我们在操作一个实体对象时,自动对与之关联的其他对象进行相同的操作。这篇文章将深入探讨Hibernate cascade在不同关联关系中的具体表现。 1. **一对一...

    Hibernate cascade (级联).doc

    在 Hibernate 中,级联(Cascade)是一种非常有用的功能,它能够帮助开发者在处理实体之间的关联时自动执行一系列相关的操作。通过级联,当对一个实体执行某些操作时,这些操作也会自动地应用到与之关联的其他实体上...

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade与inverse属性详解

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

    在Hibernate框架中,cascade选项提供了一种管理实体间关联的便捷方式,使得对一个实体的操作能够自动地应用到与之相关的其他实体上。这对于处理复杂的数据库关系非常有用,可以极大地简化代码,并减少出错的可能性。...

    hibernate cascade 测试demo

    在Java的持久化框架Hibernate中,`cascade`是一个非常重要的概念,它涉及到对象关系映射(ORM)中的数据操作传播性。本测试Demo主要目的是帮助我们理解如何在Hibernate中使用`cascade`属性来处理关联对象的数据操作...

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    Hibernate中cascade和inverse应用

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

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

    ### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...

    hibernate inverse和cascade的详细讲解

    在这些配置选项中,`inverse`和`cascade`是最具挑战性的两个概念之一。它们主要用于控制对象之间关联关系的维护以及操作的级联行为。本文将详细介绍这两个属性的概念、作用以及应用场景,并通过示例来帮助读者更好地...

    hibernate框架一对一测试案例

    **hibernate框架一对一关联测试案例详解** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。本篇我们将深入探讨Hibernate中的一对一...

    hibernate一对一关联关系

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问。在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一...

    hibernate一对一之唯一外键关联(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,用于表示两个实体之间一对一的关系。在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single...

    hibernate一对一实例

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了方便的数据访问接口,大大简化了数据库操作。在数据库关系模型中,一对一(One-to-One)关联是一种常见的关系类型,表示两个实体之间存在...

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

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

    Hibernate 一对一关联查询.docx

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联查询是一种常见的关系映射方式,用于表示两个实体之间一对一的依赖关系。这种关联通常在数据库中通过外键或者主键来实现。本文将深入探讨基于外键的一对一...

    hibernate一对一的关系

    在Java持久化框架Hibernate中,一对一(One-to-One)关系是一种常见的对象关系映射(ORM)配置,它用于表示两个实体之间的一种特殊关联,其中每个实体最多只能与另一个实体的一个实例相关联。这种关系在数据库层面...

    hibernate之一对多配置demo

    【hibernate之一对多配置demo】:在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本教程主要关注Hibernate中的一对多关系配置,并通过XML来实现,同时也涵盖了...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

Global site tag (gtag.js) - Google Analytics