Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 级联删除关联的混淆_Java_Hibernate - Fatal编程技术网

Java 级联删除关联的混淆

Java 级联删除关联的混淆,java,hibernate,Java,Hibernate,我正在使用HIbernate 3.2.5。我在部门和培训表之间有一对多的关联。一个部门可以接受一次以上的培训 <id name="deptId" type="integer" column="DEPT_ID"> <generator class="assigned"></generator> </id> <property name="deptName"> <column name="DEPT_NA

我正在使用HIbernate 3.2.5。我在部门和培训表之间有一对多的关联。一个部门可以接受一次以上的培训

<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>      
我可以看到,对于子表,控制台中打印的是更新查询,而不是删除查询:

update training set DEPT_ID=null where DEPT_ID=?
但是由于级联是
delete
,因此子表也应该执行
delete
操作,而不是
update
对吗

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


关于,

如果您使用cascade as
DELETE\u 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();

没有,我试过了,但得到了同样的结果。仍然执行
update
,而不是子表上的
delete
。@user182944更新了答案。请重试。现在
delete
delete orphan
都在工作。是因为我加载对象的方式吗?请详细解释一下。@user182944:1。如果未加载对象,则该对象不具有可见性。所以这绝对是个问题。2.删除在您的示例中起作用,但当您尝试从子集合中删除对象并保留父对象以删除删除的子对象时(例如,如果您希望从部门中删除5个培训课程中的3个),删除\u孤儿将非常有用。
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();