1

我可以检查 orphanRemoval=true 的工作原理吗?是否是 SQL 操作,即在合并更改后检查数据库是否存在孤儿。或者它是一个内存操作,它跟踪一个对象已从集合中删除,因此它必须被删除?

机制是什么?

例如,如果两个人正在编辑相同的数据,并且都有一个实体 x.collectionY 并且 collectionY 中有 ID 为 1,2,3,4 的项目......那么当两个用户都在应用程序中工作时,他们有相同的起点。如果用户 1 添加项目 5,6,7,然后用户 2 提交......因为 5,6,7 不属于他们的集合,会发生什么?

此外,如果您在支持 bean 中将一个集合换成另一个集合,这会如何影响跟踪。

对不起,基本问题,但如果它是一个 SQL 操作,我可以理解它,但需要了解它,因为我们目前正在大量使用它。

4

1 回答 1

1

如果您通过将实体的引用清空或使其引用不同的东西来删除对实体的引用,则 JPA 孤立删除要求提供者删除取消引用的实体。这是特定于提供商的,所以我不确定您到底需要知道什么 - 规范要求删除任何孤立的东西。您关于多个用户编辑相同数据的问题并不真正适用于孤立删除 - 它们是同步数据访问的一般问题。无论是否涉及孤儿删除,这些更改都应该相互冲突,因此您应该使用某种形式的锁定,乐观锁定是最常见的。

如果没有锁定,他们很有可能会用过时的数据覆盖数据并导致实体被删除,例如,如果用户 2 分离了它的实例,然后尝试将其现在过时的对象合并到实体管理器中。最后,一个事务将在没有某种形式的锁定的情况下覆盖另一个事务。

您可以找到许多描述锁定的博客和文档,我使用的最简单的是http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Locking/Optimistic_Locking

于 2013-05-21T18:24:49.797 回答