我有两种方法,一种使用 .persist() 传递 EntityClass1 ID 存储实体对象(EntityClass1 实体 bean),另一种负责删除具有相同 ID 的实体对象。
我有一个配置,我在第三种方法(在另一个类中)中调用了这两种方法:
1) 上面执行 .persist() 的方法和
2) 执行 .remove() 的方法(因此,作用于相同的实体对象 - 相同的 ID),在执行一些代码之后,如果出现任何问题。
第一个操作是正确的(我要坚持)。何时执行从数据库中删除相同实体对象的方法,当我通过 EntityManager.find() 检索要删除的对象时,后一种方法返回 NULL。这怎么可能??我确定我已经存储了该对象。
我确信已经使用了管理事务所需的(在 CMT 上下文中):在这两种方法中,我从(@PersistenceUnit 注释的)EntityManagerFactory 创建了一个 EntityManager 对象,使用 CMT 上下文的 TRY-CATCH 管理事务机制-FINALLY 块在其最终主体中关闭 EntityManager 对象(在其 TRY 主体中,我分别针对上述两种方法执行 .persist() 和 .remove())。
因此,在我的删除方法中,我无法检索要删除的对象,即使刚刚通过我的插入方法保留了该对象。可能是什么问题?
无论如何,是否有任何原因导致该对象被移除?
我是 JavaEE-JPA-JTA 的新手。非常感谢。
[编辑]:我已经解决了其中一些问题。之前返回 null 的 em.find(),现在返回我想要的对象。我刚刚修改了我的代码以使用单个实体管理器(@Jaspreet 评论让我注意到了这一点)并且我不得不修改 CMT 事务管理(不必使用那个 TRY-CATCH-FINALLY 块)。您可以使用 EntityManager remove() 方法查看 JPA 的奇怪行为。不过,在这个新的讨论中,我发布了新问题。