gpt4 book ai didi

java - orphanRemoval=true 在 JPA 2.0 中如何工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:11 24 4
gpt4 key购买 nike

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

机制是什么?

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

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

很抱歉问了一些基本问题,但如果这是一个 SQL 操作,我就可以理解它,但需要认真思考一下,因为我们目前正在大量使用它。

最佳答案

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

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

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

关于java - orphanRemoval=true 在 JPA 2.0 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674131/

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