问题标签 [orphan-removal]

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.

0 投票
8 回答
180946 浏览

hibernate - JPA orphanRemoval=true 与 ON DELETE CASCADE DML 子句有何不同

我对 JPA 2.0orphanRemoval属性有点困惑。

我想当我使用我的 JPA 提供者的数据库生成工具来创建底层数据库 DDL 以具有ON DELETE CASCADE特定关系时,我可以看到它是必需的。

但是,如果数据库存在并且它已经有一个ON DELETE CASCADE关系,这是否不足以适当地级联删除?除此之外还有什么作用orphanRemoval

干杯

0 投票
5 回答
99146 浏览

java - JPA 中的 CascadeType.REMOVE 和 orphanRemoval 有什么区别?

有什么区别

这个例子来自Java EE Tutorial,但我仍然不明白细节。

0 投票
1 回答
34 浏览

java - 无法在 OneToMany 映射中删除孩子并添加新孩子 [休眠]

我知道这个问题已经被问过很多次了,但没有一个解决方案对我有用。

所以我有一个父类:

还有一个子类:

现在,当我收到带有新电话列表的用户类更新时,我想删除所有旧电话并添加新电话。请注意,这所有操作都发生在同一个@Transactional 中。

我试过的解决方案:

user.getPhoneList().clear()
user.getPhoneList().addAll(新电话列表)

当我尝试上述逻辑时,Hibernate 正在尝试将旧手机的 userId 设置为 null。在这个位置,我得到 DataIntegrityViolation,因为 Phone 表中的 userId 是非空列。

请提供任何可以在这里工作的适当解决方案。

0 投票
1 回答
34 浏览

java - 将实体移动到另一个拥有的 OneToMany 集合中

在我的应用程序中,有一个 Person 实体,它具有许多 PersonRole 类型的角色。

有时数据库中有重复的人,我正在尝试实现一个函数将这两个人合并为一个。由于 PersonRole 还附加了一些权限,我不想删除并重新创建它,我想将它从死亡的人移动到幸存的人:

PersonRole 中的方法如下所示:

不幸的是,它不起作用。当我运行它时,PersonRoles 被删除并且没有添加到幸存的人中。

我需要更改什么,以便通过 surviving.roles 关系添加和保留它们?

0 投票
1 回答
35 浏览

hibernate - Hibernate:删除和添加与orphanRemoval相同的实体,实体被删除

我对 Hibernate 有一个奇怪的行为。我的环境是带有 Panache 的 Quarkus,但我认为它与问题无关。

我正在使用一个带有 id、父级和子级的简单树实体。我的 moveInto 方法只是将一个孩子移动到另一个父母:

  • 我把孩子从老父母身上移走了
  • 我在新的父母中添加了孩子

事务完成后,孩子被完全移除,并且不考虑添加的动作。

这是正常行为吗?

实体 :

我的服务:

结果 :

0 投票
0 回答
36 浏览

postgresql - 左连接中连接条件的方向是否重要?

有两个 postgres 表,其结构大致如下:

虽然在设置 FK 约束时没有正确定义这些约束,但在应用程序逻辑中products.rawDataId映射到rawData.idrawData.productId映射到products.id. 中的每条记录products可以有 1 条或 0 条记录rawData,同时也有一些孤立记录,rawData其关联products记录已被删除。

我正在尝试rawData通过左连接来查找所有孤立的记录。但是,根据我的连接条件,我得到不同的行数:

这些表有大约 100k 行,因此手动遍历它们并不容易,但我想知道在什么情况下我会根据连接条件得到不同的结果。他们不应该返回相同数量的行吗?

考虑到这些表结构和约束,我是否可以执行任何其他查询来查找差异,或者更准确地获取孤立行的数量?

根据示例表,我想得到的输出是: