hibernate---级联保存级联删除

Posted more harder, the more fortunat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate---级联保存级联删除相关的知识,希望对你有一定的参考价值。

直接上菜:

dept.hbm.xml:关键点标蓝色这部分,inverse表示放弃维护外键关系,cascade就不用说了

<hibernate-mapping package="com.cissst.it.dept.entity">
    <class name="Dept" table="DEPT1">
        <id name="deptno" column="DEPTNO">
            <generator class="native"></generator>
        </id>
        <property name="dname" column="DNAME"></property>
        <set name="emps" inverse="true" cascade="save-update,delete">
            <key column="deptno"></key>
            <one-to-many class="com.cissst.it.emp.entity.Emp" />
        </set>
    </class>
</hibernate-mapping>

 

emp.hbm.xml

<hibernate-mapping package="com.cissst.it.emp.entity">
    <class name="Emp" table="EMP1">
        <id name="empno" column="EMPNO">
            <generator class="native"></generator>
        </id>
        <property name="ename" column="ENAME"></property>
        <property name="job" column="JOB"></property>
        <many-to-one name="dept" class="com.cissst.it.dept.entity.Dept"/>
    </class>
    
</hibernate-mapping>

 

测试类:

    public static void main(String[] args) {
        //级联保存
        Session session = SessionUtil.openSession();
        Transaction tx = session.getTransaction();
        tx.begin();
        Dept dept = new Dept();
        dept.setDname("develop");
        Emp emp1 = new Emp();
        emp1.setEname("PECOOL");
        emp1.setJob("CODE");
        Emp emp2 = new Emp();
        emp2.setEname("PHOEBE");
        emp2.setJob("PHOTO");
        HashSet<Emp> set = new HashSet<Emp>();
        set.add(emp1);
        set.add(emp2);
        dept.setEmps(set);
        session.save(dept);
        tx.commit();
        session.close();
    }

result:

    只需要保存dept对象,dept中的emp对象也会得到保存,一般1方放弃维护外键关系有助于改善性能,发现sql中明显少了update语句。

以上是关于hibernate---级联保存级联删除的主要内容,如果未能解决你的问题,请参考以下文章

hibernate中多表映射关系配置

hibernate第三天

hibernate级联操作

hibernate 3如何级联更新

关于Hibernate级联更新的一个问题

hibernate级联更新外键问题