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---级联保存级联删除的主要内容,如果未能解决你的问题,请参考以下文章