我不是hibernate的专家,正如主题所述,我有一个带有对象集合的Object。 我试过用
session.delete(myObject)
并且具有所有相关子项的实体从数据库中正确删除。
但是当我运行一个简单的命名查询时:
<query name="deleteByID">
DELETE FROM MyObject o WHERE o.objId IN (:objIds)
</query>
然后在代码中
Query deleteQuery = s.getNamedQuery("deleteByID");
deleteQuery.setParameterList("objIds", objIds);
return deleteQuery.executeUpdate();
但只删除了主要实体,而子项仍保留在数据库中。 该集合被正确标记为delete-orphan。我想知道为什么会出现这种行为,以及如何使用命名查询实现完全删除。
答案 0 :(得分:4)
这是一个已知问题,hibernate不会通过HQL执行级联删除。如果加载对象并使用session.delete(object);
将其删除,则会遵循级联关系。不是通过HQL。您有3个选项中的任何一个。
session.delete();
在此处阅读更多内容:https://forum.hibernate.org/viewtopic.php?f=1&t=944722&start=0