Cascade属性: 用来设置级联增删改操作,即增删改一张表数据时,要不要同时级联增删改相应关联表的数据
Cascade的取值:
save-update:表示级联保存和更新操作
delete:表示级联删除操作
all:表示级联增删改操作
none:表示不作级联操作(hibernate默认行为)
级联操作的前提: 1.mapper文件中使用Cascade开关 2.在增删改对像时,要主动维护对像间关系。
<!--Clazz.hbm.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="join.model.Clazz" table="CLAZZ">
<id name="id" column="ID">
<generator class="increment"></generator>
</id>
<property name="cname" column="CNAME"></property>
<!-- 一对多关系 -->
<!-- 对set集合类型属性的说明 -->
<!-- cascade级联增删改:save-update|delete|all|none -->
<set name="stus" cascade="all">
<!-- 逻辑外键 -->
<key column="CID"></key>
<!-- 对集合中的数据类型进行说明 -->
<one-to-many class="join.model.Student"/>
</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://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="join.model.Student" table="STUDENT">
<id name="id" column="ID">
<generator class="increment"></generator>
</id>
<property name="sname" column="SNAME"></property>
</class>
</hibernate-mapping>
//ClazzDao
public class ClazzDao {
public void insert(Clazz clazz) {
Session session = HibernateUtil.findSession();
session.save(clazz);
}
}
//ClazzService
public class ClazzService {
private ClazzDao dao = new ClazzDao();
public void save(Clazz clazz) {
Session session = HibernateUtil.findSession();
Transaction tx = session.beginTransaction();
try {
dao.insert(clazz);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}
}
}
//测试
/*
* 级联保存
*/
@Test
public void testSaveClazz() {
// 班级
Clazz clazz = new Clazz();
clazz.setCname("javaee四班");
// 学生对像
Student stu1 = new Student();
stu1.setSname("admin7");
Student stu2 = new Student();
stu2.setSname("admin8");
Set<Student> set = new HashSet<>();
set.add(stu1);
set.add(stu2);
// 班级关联学生集合
clazz.setStus(set);
//hibernate上下文操作班级时,发现clazz对像中有集合类型对像存在,就会去级联操作关联表中数据
ser.save(clazz);
}