1 一对多,当一的一方被删除时,由于多的一方指向该方,所以所以指向一方这条记录的信息均会被删除,以下是Demo。
实体类与配置–多的一方:
public class Student {
private int id;
private String name;
private int age;
private Grade grade;
}
<class name="Student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!--
cascade 级联:让操作级联到子实体
save-update:保存和更新多的一端数据时,一的一端的数据可以一起保存和更新
none:不级联
delete:删除级联-不能在多的一端使用
all:表示所有操作都级联
-->
<many-to-one name="grade" class="Grade" column="grade_id"
cascade="save-update"
></many-to-one>
</class>
在多的一方配置级联操作删除配置。
实体类与配置–一的一方:
public class Grade {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>(0);
}
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- set是 Grade中的集合属性 name属性名称 -->
<set name="students" cascade="delete">
<!-- key表示外键 column外键列名-->
<key column="grade_id"></key>
<!-- one-to-many 一对多 类Grade 中 students 所表示类型 -->
<one-to-many class="Student"/>
</set>
</class>
测试代码:
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Grade grade = (Grade)session.get(Grade.class, 1);
session.delete(grade);
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
//throw e;
}finally{
HibernateUtil.closeSession();
}