级联操作
所谓级联操作就是说,当你进行某个操作(添加/修改/删除...),就由hibernate自动给你完成.
比如: Department <---->Student 对象关系,我希望当我删除一个department ,那么就自动删除该部门的所有学生?
再比如: bbs项目
主帖<---->回帖 , 把主帖删除,那我们就希望把该主帖的回帖自动删除,这样我们可以使用级联(cascade)操作
案例:如何配置级联操作,当删除某个部门的时候,我们自动删除其学生.
首先我们在 配置文件中修改:
<!-- 配置one-to-many关系
cascade="delete" 当删除该部门的时候(主对象,则级联删除它的学生从对象) -->
<setname="stus" cascade="delete">
<!-- 指定Student类对应的外键 -->
<keycolumn="dept_id" />
<one-to-manyclass="Student" />
</set>
java代码中操作:
//演示删除级联
//获取到某个部分
Departmentdepartment=(Department) s.get(Department.class, 41);
s.delete(department);
演示save-update
配置文件:
<setname="stus" cascade="save-update">
<!-- 指定Student类对应的外键 -->
<keycolumn="dept_id" />
<one-to-manyclass="Student" />
</set>
代码:
//添加学生
Department department=new Department();
department.setName("业务部门3");
Student stu1=new Student();
stu1.setName("顺平6");
// stu1.setDept(department);
Studentstu2=new Student();
stu2.setName("小明6");
// stu2.setDept(department);
Set<Student>students=new HashSet<Student>();
students.add(stu1);
students.add(stu2);
department.setStus(students);
s.save(department);
说明:
①在集合属性和普通属性中都能使用cascade
②一般讲cascade配置在one-to-many(one的一方,比如Employee-Department),和one-to-one(主对象一方)