Java 级联删除关联的混淆
我正在使用HIbernate 3.2.5。我在部门和培训表之间有一对多的关联。一个部门可以接受一次以上的培训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
<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();