所在cascade,就是说我在更新一方的时候,可以根据这一方对象之间的关联关系,去对被关联方进行持久化,比如说Team和Student之间的1对多关系,使用cascade,可以在team方维护其持有的student集合时,自动对其新增,修改,删除的student对象进行持久化,而没必要显示的进行session.save(student)操作,cascade="delete"的意思就是说,我在session.delete(team)的时候,可以一并删除其所有的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 );
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;
}
}
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/delete/Student.hbm.xml" />
< mapping resource ="Cascade/delete/Team.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
<! 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/delete/Student.hbm.xml" />
< mapping resource ="Cascade/delete/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.delete.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.delete.Team"
lazy ="no-proxy" >
</ many-to-one >
</ class >
</ hibernate-mapping >
<! 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.delete.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.delete.Team"
lazy ="no-proxy" >
</ many-to-one >
</ class >
</ hibernate-mapping >
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 - Hibernate Tools
-->
< hibernate-mapping >
< class name ="Cascade.delete.Team" table ="team" lazy ="true" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
<! 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.delete.Team" table ="team" lazy ="true" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >