问题标签 [all-delete-orphan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
grails - 域类如何将“所有删除孤儿”级联到它没有参考的孩子?
在 Grails 中,您可以有一个子类:
有两个父类
看来,如果 I father.delete()
,则 Grails 会引发数据库错误,指出Father
无法删除,因为child
仍然存在。
如果该类没有对该类的直接引用,all-delete-orphan
我如何级联?Child
Father
Child
hibernate - Hibernate 映射:删除孤儿级联
关于休眠和删除孤儿级联的问题。假设我有一些 Parent 类,里面有 Child 的集合。在一对多关系的父类的休眠映射中,我设置了级联全部删除孤儿。假设所有其余部分都配置正确。
所以,我用两个子对象 A 和 B 加载父 P。然后我从父集合 (.getChildren().remove(A)) 中删除子 A 并调用 session.saveOrUpdate(P) 来保存父对象。由于设置了 all-delete-orphan 级联,父对象与一个子对象一起保存,另一个已删除的子对象 (A) 从 DB 中删除。这是正确的行为。
据我了解,当休眠加载此类对象(P)时,它会将其子列表包装到某个持久集合(例如 PersistentSet)中,并且该集合的所有操作都被休眠拦截,这允许它决定应该从数据库中孤立地删除哪些孩子。
但是..我有以下项目架构:
在实体从 db(DO 对象)加载后,它被传递到服务(外观对象),在那里它使用 Dozer 框架转换为对象。在转换后,来自 DO 对象的持久集合被转换为 TO 中的简单 ArrayList。然后将其传递到 UI 以进行修改(从子集合中删除子 A)。当我们想要保存它时,我们将它传递给外观,使用 Doser 将它转换回 DO 对象,然后我们将它保存到 DB(使用 session.saveOrUpdate)。
在这种情况下,级联不起作用,并且删除的孩子不是孤立的。它仍然呈现在 db 中。
只有当我们调用 saveOrUpdate 的 .merge insted 时,级联才有效。我认为这是因为 hibernate 自动将我们的对象绑定到会话,然后对其进行更新。
那么,谁能描述我这种行为?是否可以使用这种 DO -> TO -> DO 转换来支持删除孤儿级联?
这只是常见的场景和常见的问题。如果需要,我将能够附加代码/映射等。
grails - Grails数据绑定一对多关系
我正在尝试利用 Grails 为一对多关联处理数据绑定的能力。我能够成功地分配给关系,但删除单个元素或所有元素都不起作用。
这是我的模型的示例:
通过网站创建一个新的 ScheduledCourier 对象时,我可以传递一个路由列表以自动与标记绑定,如下所示:
这在我的控制器中对我来说很好:
如果我改用以下标记,我可以单步调试调试器并看到 routes 属性现在是 [] 并且对象保存得很好,但记录不会从数据库中删除。
另外,如果我这样发送标记:
courier.routes 不会更新为仅包含 1 个对象。
有没有人见过这种行为?
这是 Grails 1.3.7……至少现在是这样。
编写了一个重现此行为的集成测试:
hibernate - Hibernate级联删除孤儿
我有 2 个实体:News 和 NewsComment
和
和这样的代码:
我明白了
我想级联删除新闻和评论新闻一起
java - Hibernate all-delete-orphan 用于有序集合
我有这样的关系
在我的 Java 代码中,对此执行了一组操作,就像
现在这个 SomeBeans 是一个linkedHashmap,所以订单得到了维护,但是由于在级联中使用了所有 Delete Orphan,我在特定场景中遇到了异常:
所以我把上面的java实现改成
但是这样做我无法维持来自linkedHashMap SomeBeans 的订单。
有没有人也遇到过这样的问题,在这方面的任何帮助都将不胜感激
问候,
瓦布哈夫
java - 无法休眠以通过级联删除子实例,这些子实例已从一对多关系中删除
这里有一个小问题:
我有两个实体类,比方说
现在映射本质上是:
(我在这里省略了 id 映射和字段,我使用常规生成的 id)
我基本上需要保持一个干净的数据库,就像当我从父列表中删除元素然后提交父时一样,需要删除相应删除的子数据库条目。Child 实例引用了我以后需要删除的其他实体,因此如果子实例保留在数据库中,我将无法删除那些引用的对象。
到目前为止我发现了什么:如果我要保持 hibernate 的 PersistentCollection 包装器就位,我在下面尝试的任何事情都应该有效。问题是,我的数据库对象来自几层框架,其中包括一个 UI 框架,它使用 bean 属性抽象来调用 setter,以及一个来回克隆和序列化对象的网络通信层。这两个层都在内部替换了集合实例,因此删除了这些 PersistentCollection 包装器。重写这些以不这样做不是一种选择。
也就是说,我尝试过的 8 件事没有奏效:
1) 将关系配置为 cascade="all",使用 session.update(parent)。
2) 将关系配置为 cascade="all-delete-orphan",使用 session.update(parent)。
3) 将关系配置为 cascade="all" 并使用 session.merge(parent)
所有这些都会导致休眠执行“UPDATE CHILD SET parent.id = null WHERE parent.id = ...”。这在重新加载父实例时成功地从父列表中删除了子实例,但子实例保留在数据库中并阻止我删除其他引用的实体。
4-6) 使用配置 1-3,同时将父键列定义为非空
这导致休眠不做任何事情。我在另一篇文章中读到,使键列非空会导致删除。听起来可能,因为更新为 null 不再是一种选择,但不起作用。如果我从集合中删除孩子,提交更改并从数据库重新加载实例,孩子会重新出现。
7+8) 父键可空或非空无关紧要,但将关系配置为 cascade=all-delete-orphans 并使用 session.merge(parent)
由于删除了 PersistentCollection 包装器,这会导致 hibernate 抛出异常“具有 cascade="all-delete-orphan" 的集合不再被拥有的实体实例引用”。
为了解决我的问题,我唯一需要的是休眠来执行选项 1-3 中的查询作为删除而不是更新。我希望我只是无法找到以在没有 PersistentCollection 包装器的情况下删除这些映射的方式来配置映射的选项,但在我看来,目前似乎没有这样的选项。有谁知道是否有办法配置这个?
/编辑:为了澄清,我想要发生的事情的例子:
nhibernate - 即使使用 AllDeleteOrphan,FluentNHibernate 也不会删除子实体
我有一个拥有门的汽车实体。当汽车被删除时,门也应该被删除,因为它们本身没有意义。这是 FluentNHibernate 中的映射。
CarDao 中的 Delete 方法如下所示:
但是,以这种方式删除汽车时,不会删除车门,而是将 carId 设置为 de NULL。我认为 Cascade.AllDeleteOrphan() 会负责删除孩子(门)。我不得不重做 Delete 方法:
我觉得我在这里缺少一些东西,因为在删除它之前必须获取一个对象是不对的。有什么想法吗?
hibernate - Hibernate - 更新与级联类型 all-delete-orphan 映射的集合的正确方法
如果集合被它的“父”对象映射为all-delete-orphan ,那么更新集合的正确和简单的方法是什么?
通过更新,我不仅仅意味着从集合中添加/删除项目,还包括更新项目属性的值(当然对于之前在集合中的那些项目)。
场景是有一个Parent
对象具有一组Child
对象,并且有一个表单,用户可以通过该表单编辑 Children 集合 - 添加/删除子项,但也可以编辑子项的属性(在同一表单上)。
基本上我想要这样的东西:
这不起作用,我理解原因,但在我看来,这应该是使用休眠和开发 UI 应用程序时非常常见的情况,所以我正在寻找一个(按书本)解决方案。
我正在使用休眠 3.6.10 和基于 XML 的配置。
这是相关的映射(我使用 ArrayList 来存储子集合):
如果重要的话,子对象也有以相同方式映射的集合,但我认为这不相关,因为这是一个与所描述的问题相同的问题。
顺便提一句。我为此浪费了一整天的时间,当然还检查了数十个与此非常相似的问题,但还没有找到合理的解决方案或解决此问题的模式。也许我错过了什么?
java - 删除孤儿给出异常
嗨,我有部门实体,在那个部门实体中,我在字符串数据类型中有一个名为部门名称的属性,另一个属性parentdepartment作为部门数据类型(类类型)作为该列的外键。我使用了一对一的关系和级联类型是孤儿删除。如果删除我的父部门,我不想删除子部门,因此我在这里使用了孤儿删除,但它给出了如下异常。 例外
部门实体
java - 删除孤儿在休眠中给出异常
嗨,我有部门实体,在那个部门实体中,我在字符串数据类型中有一个名为部门名称的属性,另一个属性parentdepartment(一对多)作为部门数据类型(类类型)作为该列的外键。我使用了一个-to -many 关系和 orphan-removal=true。如果删除我的父部门,我不想删除子部门,因为这个原因我在这里使用了 orpen-removal,但它给出了以下例外。
例外
部门实体
测试代码