所在cascade,就是说我在更新一方的时候,可以根据这一方对象之间的关联关系,去对被关联方进行持久化,比如说Team和Student之间的1对多关系,使用cascade,可以在team方维护其持有的student集合时,自动对其新增,修改,删除的student对象进行持久化,而没必要显示的进行session.save(student)操作
数据库脚本:
create table student(id varchar(32) primary key,
team_id varchar(32),
name varchar(32),
cardid varchar(32),
age int);
create table team(id varchar(32) primary key,
team_id varchar(32),
teamname varchar(32));
insert into team values("1","1","team1");
insert into student values("1","1","stu1","20070101",22);
insert into student values("2","1","stu2","20070102",23);
持久化JavaBean
package Cascade.saveUpdate;
public class Student ...{
private String id;
private String cardid;
private String name;
private int age;
private Team team;
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
public String getCardid() ...{
return cardid;
}
public void setCardid(String cardid) ...{
this.cardid = cardid;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
public int getAge() ...{
return age;
}
public void setAge(int age) ...{
this.age = age;
}
public Team getTeam() ...{
return team;
}
public void setTeam(Team team) ...{
this.team = team;
}
}
package Cascade.saveUpdate;
import java.util.HashSet;
import java.util.Set;
public class Team ...{
private String id;
private Set students=new HashSet();
private String teamName;
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
public Set getStudents() ...{
return students;
}
public void setStudents(Set students) ...{
this.students = students;
}
public String getTeamName() ...{
return teamName;
}
public void setTeamName(String teamName) ...{
this.teamName = teamName;
}
}
Hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&useUnicode=true
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.password">1234</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="current_session_context_class">thread</property>
<property name="jdbc.batch_size">15</property>
<mapping resource="Cascade/saveUpdate/Student.hbm.xml" />
<mapping resource="Cascade/saveUpdate/Team.hbm.xml" />
</session-factory>
</hibernate-configuration>
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 - Hibernate Tools
-->
<hibernate-mapping>
<class name="Cascade.saveUpdate.Student" table="student">
<id name="id" unsaved-value="null">
<generator class="uuid.hex"></generator>
</id>
<property name="cardid" type="string"/>
<property name="name" type="string"/>
<property name="age" type="int"/>
<many-to-one name="team"
column="team_id"
class="Cascade.saveUpdate.Team"
lazy="no-proxy">
</many-to-one>
</class>
</hibernate-mapping>
Team.hbm.xml 这里先配置成cascade="none"
<?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 - Hibernate Tools
-->
<hibernate-mapping>
<class name="Cascade.saveUpdate.Team" table="team" lazy="true">
<id name="id" column="id">
<generator class="uuid.hex"></generator>
</id>
&nbs
分享到:
相关推荐
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) private User user; ``` 在上面的例子中,我们设置了`inverse=true`,这意味着 `Address` 实体不再负责维护与 `User` ...
一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...
在Hibernate中,级联操作可以通过`cascade`属性进行配置。主要有以下几种级联类型: 1. `save-update`:当保存或更新父实体时,会自动保存或更新所有关联的子实体。 2. `merge`:在调用`session.merge()`时,不仅...
在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
需要注意的是,在`save-update`和`delete`操作中,级联保存和级联更新总是绑定在一起的,因此没有单独的`save`或`update`选项。 #### 三、示例说明 为了更好地理解以上概念,下面通过具体的例子来进一步阐述: ...
2. **级联操作类型**:Hibernate支持多种级联类型,包括`SAVE_UPDATE`、`PERSIST`、`MERGE`、`REFRESH`、`DELETE`和`ALL`。每种类型对应着对关联对象的不同操作行为。 3. **配置级联**:在Hibernate的映射文件(XML...
### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...
### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...
本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 首先,级联操作在Hibernate中是一种配置,用于指定当主表中的实体发生变化时,是否以及如何更新或删除关联的从表实体。...
级联策略(cascade)可以设置为"save-update",这样在保存或更新部门时,其包含的员工也会被同步处理。 ```xml <!-- Department.hbm.xml --> <set name="employees" table="employee" cascade="save-update"> ...
### Hibernate基础之关联映射与级联操作 #### 第一部分:主键生成策略与对象状态管理 ##### 主键生成策略 在使用Hibernate框架时,合理的主键生成策略能够极大地简化开发工作并提升应用性能。Hibernate提供了多种...
- `cascade="save-update"`:表示只有保存和更新操作会被级联执行。 - `cascade="delete"`:表示只有删除操作会被级联执行。 - **应用示例** - **一对多**:例如,在`Department`和`Employee`的关系中,如果`...
- save-update: 只有在执行 save 或 update 操作时才执行级联操作。 - delete: 只有在执行 delete 操作时才执行级联操作。 例如,如果用户实体被删除时,希望其关联的所有组也被删除,则可以在映射文件中设置级联...
1. **级联操作**:通过设置@OneToMany或@ManyToOne的cascade属性,可以在操作父实体时自动处理子实体的持久化状态。 2. **懒加载**:延迟加载机制允许实体的部分属性在需要时才加载,提高程序性能。 3. **缓存**:...
- `all`:包含 `save-update` 和 `delete`,即保存、更新和删除时都会级联操作。 - `all-delete-orphan`:除了 `all` 操作外,还会删除与父对象失去关联的子对象。 例如,假设有一个 `Course` 类关联着多个 `...
例如,`cascade=none`表示不进行任何级联操作,而`cascade=all`则表示在所有情况下都进行级联操作,包括保存、更新和删除。`save-update`仅在保存或更新主对象时级联,`delete`则只在删除主对象时级联。合理设置级联...
级联操作(Cascade)是Hibernate的一个特性,它允许我们将一个实体的操作(如保存、更新、删除等)自动应用到与其关联的其他实体上。例如,如果我们在删除一个学生时希望同时删除该学生选的所有课程,就可以使用级联...
- `all`:包括`save-update`和`delete`,即在保存、更新和删除时都进行级联操作。 - `all-delete-orphan`:除了`all`的行为外,还将在父对象中被移除的子对象(孤儿)从数据库中删除。 例如,如果`Teacher`和`...