Hibernate級聯操作Cascade學之---delete
阿新 • • 發佈:2019-01-03
所在cascade,就是說我在更新一方的時候,可以根據這一方物件之間的關聯關係,去對被關聯方進行持久化,比如說Team和Student之間的1對多關係,使用cascade,可以在team方維護其持有的student集合時,自動對其新增,修改,刪除的student物件進行持久化,而沒必要顯示的進行session.save(student)操作,cascade="delete"的意思就是說,我在session.delete(team)的時候,可以一併刪除其所有的student
資料庫指令碼:
createtable student(id varchar(32) primarykey,team_id
name varchar(32),
cardid varchar(32),
age int);
createtable team(id varchar(32) primarykey,
team_id varchar(32),
teamname varchar(32));
insertinto team values("1","1","team1");
insertinto student values("2","1","stu2","20070102",23);
持久化JavaBean
package Cascade.saveUpdate;publicclass Student {
private String id;
private String cardid;
private String name;
privateint age;
private Team team;
public String getId()
return id;
}
publicvoid setId(String id) {
this.id = id;
}
public String getCardid() {
return cardid;
}
publicvoid setCardid(String cardid) {
this.cardid = cardid;
}
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
return age;
}
publicvoid setAge(int age) {
this.age = age;
}
public Team getTeam() {
return team;
}
publicvoid setTeam(Team team) {
this.team = team;
}
}
package Cascade.saveUpdate;
import java.util.HashSet;
import java.util.Set;
publicclass Team {
private String id;
private Set students=new HashSet();
private String teamName;
public String getId() {
return id;
}
publicvoid setId(String id) {
this.id = id;
}
public Set getStudents() {
return students;
}
publicvoid setStudents(Set students) {
this.students = students;
}
public String getTeamName() {
return teamName;
}
publicvoid 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>
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>
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>
<property name="teamName" column="teamname"></property>
<set name="students" lazy="true" inverse="false" cascade="delete">
<key column="team_id"></key>
<one-to-many class="Cascade.delete.Student"/>
</set>
</class>
</hibernate-mapping>
測試程式碼:
package Cascade.delete;import java.io.File;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
publicclass Test