调用EntityManager.remove(someEntity)
- 除了事务范围的实体管理器 - 导致实体被分离吗?在我阅读JSR-317时:
如果a,则分离的实体来自事务提交 使用事务范围的容器管理的实体管理器(请参阅 第3.3节);来自事务回滚(参见第3.3.2节);从 将实体与持久化上下文分离;清除 持久化背景;关闭实体经理;或来自 序列化实体或以其他方式通过值传递实体 - 例如,到 单独的应用程序层,通过远程接口等
它没有提到remove()
导致实体被分离,尽管其他网站提到它。请提供你的答案。
答案 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页。
希望它有所帮助。