hibernate的级联操作
cascade和inverse (Employee – Department)
l Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:
none,all,save-update,delete, lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many)。一般对many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to-many>中设置级联。
用部门和员工举例,多个员工对应一个部门(多对一关联关系)
员工类:Employee.java
Employee emp1 = new Employee();
emp1.setDepart(depart); //建立两个对象的关联关系
emp1.setName("emp name");
//把两个Employee对象添加到set集合中
emps.add(emp1);
emps.add(emp2);
//为Department对象注入set集合属性
depart.setEmps(emps);
s = HibernateUtil.getSession();
tx = s.beginTransaction();
//保存Department对象
s.save(depart);
只需要保存部门类
l inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。
one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。
注: 配置成one-to-one的对象不维护关联关系
多层级联关系操作时,
比如A一对多B,B一对多C,
则需要先操作B,再操作A
代码练习
<set name="emps" cascade="save-update">
<key column="depart_id"/>
<one-to-many class="Employee"/>
</set>
<set name="students" table="taacher_student" inverse="true"><!-- table是用来指定中间表的属性 -->
<key column="teacher_id"></key><!-- 查找教师id时,链接中间表表的teacher_id -->
<many-to-many class="Student" column="student_id"></many-to-many>
</set>

浙公网安备 33010602011771号