Hibernate--级联删除

来源:互联网 发布:双头螺纹怎么编程 编辑:程序博客网 时间:2024/06/05 11:40

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();        }