orphanRemoval = true如何在JPA 2.0中工作

时间:2013-05-21 15:45:47

标签: java jpa

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

有什么机制?

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

另外,如果在支持bean中将一个集合换成另一个集合,这会对跟踪产生什么影响。

对不起基本的问题,但是如果是SQL操作我会很好并且理解它,但是我们现在正在大量使用它,需要先了解它。

1 个答案:

答案 0 :(得分:1)

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

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

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