EntityManager remove()是否导致脱离

时间:2018-03-10 18:17:13

标签: jpa

调用EntityManager.remove(someEntity) - 除了事务范围的实体管理器 - 导致实体被分离吗?在我阅读JSR-317时:

  

如果a,则分离的实体来自事务提交   使用事务范围的容器管理的实体管理器(请参阅   第3.3节);来自事务回滚(参见第3.3.2节);从   将实体与持久化上下文分离;清除   持久化背景;关闭实体经理;或来自   序列化实体或以其他方式通过值传递实体 - 例如,到   单独的应用程序层,通过远程接口等

它没有提到remove()导致实体被分离,尽管其他网站提到它。请提供你的答案。

1 个答案:

答案 0 :(得分:2)

根据JPA 2.1 specification 3.2.3删除部分,PDF第82页),我们找到了与您的问题相关的重要信息:

  

删除实体后,其状态(生成状态除外)将是实体 remove操作被称为

所以,答案似乎是: 取决于

然而,在第80页,我们发现了另一个重要的信息。

  

已删除的实体实例是具有持久性标识的实例,与持久性上下文相关联,将在事务提交时从数据库中删除。

因此,我们可以推断它不处于分离的状态,因为它仍然“关联”,直到最终被TX提交删除。

深入挖掘,您可以参考JPA lifecycle image的答案中提供的Vlad Mihalcea来“了解更好的JPA状态转换”。如第一张图片(JPA)所示,实体不会转换到分离的状态,但会以已删除的状态结束。

有关remove(..)操作语义的更多详细信息,请参阅JPA规范文档的第81/82页。

希望它有所帮助。