gpt4 book ai didi

hibernate 不会使用命名查询删除子项,而是使用 session.delete() 删除

转载 作者:行者123 更新时间:2023-12-03 08:12:48 25 4
gpt4 key购买 nike

正如主题中所述,我不是 hibernate 专家,我有一个对象,其中包含对象集合。
我尝试使用

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();

但只有主实体被删除,而子实体仍保留在数据库中。
该集合被正确标记为删除孤儿。我想知道为什么会出现这种行为,以及是否有可能如何使用命名查询实现完全删除。

最佳答案

这是一个已知问题,hibernate 不会通过 HQL 执行级联删除。如果您加载对象并使用 session.delete(object); 将其删除然后尊重级联关系。不是通过 HQL。您有 3 个选项中的任何一个。

  • 加载它们并调用session.delete();
  • 通过 HQL 加载所有子项,删除它们,然后是真实对象。
  • 在数据库级别放置级联链接。所以当你删除它时,数据库会处理它。

  • 在这里阅读更多: https://forum.hibernate.org/viewtopic.php?f=1&t=944722&start=0

    关于hibernate 不会使用命名查询删除子项,而是使用 session.delete() 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275291/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com