级联DELETE对协会的混淆

时间:2012-11-10 16:31:41

标签: java hibernate

我使用的是HIbernate 3.2.5。我在Dept和Training表之间有一对多的关联。一个部门能够接受多次培训。

<id name="deptId" type="integer" column="DEPT_ID">
      <generator class="assigned"></generator>
  </id>
  <property name="deptName">
      <column name="DEPT_NAME"></column>
  </property>
  <map name="trainingDetails" inverse="false" cascade="delete" lazy="false">
      <key column="DEPT_ID"></key>
      <map-key formula="ID" type="integer"></map-key>
      <one-to-many class="model.Training"/>
  </map>      

当我尝试删除条目时:

SessionFactory sf = new Configuration().configure("trial.cfg.xml").buildSessionFactory();
    Session session = sf.openSession();
    Dept department = new Dept();
    department.setDeptId(2);        
    session.delete(department);
    session.flush();
    session.close();

我可以看到,对于子表,在控制台中打印更新查询而不是删除查询:

update training set DEPT_ID=null where DEPT_ID=?

但是由于级联是delete,因此子表还应该执行delete操作而不是update权限吗?

请让我知道我的错误在哪里。

此致

1 个答案:

答案 0 :(得分:1)

如果您使用级联作为DELETE_ORPHAN表明子对象不能独立存在,它将会这样做。

此外,在删除之前,您没有加载对象图。执行删除操作如下:

SessionFactory sf = new Configuration().configure("trial.cfg.xml")
                                       .buildSessionFactory();
    Session session = sf.openSession();
    //load the object before deleting
    Dept department = session.get(Dept.class, new Integer(2));
    session.delete(department);
    session.flush();
    session.close();