首页 > 解决方案 > JPA - 使用 EntityManager remove() 方法的奇怪行为

问题描述

我在一个配置(JTA - CMT)中,我必须在创建实体对象后删除它。我找到它后使用 em.remove(object) ,但是 remove 不起作用,或者它似乎不起作用。

发生的事情是我想要并尝试删除的对象仍在数据库中。

一旦执行了删除操作,如果我稍后尝试从它所属的实体表中检索记录,我会得到这个对象(显然是我之前保存的其他对象)。我检查实体表,通过外壳访问数据库,确认我必须删除的对象存储在表中。真奇怪。但是,如果我尝试在调用 remove() 的方法中做一个小测试来检索对象,在调用 remove() 之后,通过对 find() 的新调用,系统正确地返回 null (它说我那个对象不存在)。

MyEntity object = em.find(MyEntity.class, my_entity_id);  // it is found
if (object != null) {
    em.remove(object);
    log.debug("something here");
} else
    log.debug("something else here");

// here i am testing whether it is still existing
object = em.find(MyEntity.class, my_entity_id);  // it is not found, returns null

我也尝试在 remove() 之后立即使用 flush() 但没有任何变化,实际上出现了错误:

“java.sql.SQLException:IJ031070:事务无法继续:STATUS_MARKED_ROLLBACK”

有没有人遇到过这种情况?有什么建议吗?

标签: jpajakarta-eeentitymanager

解决方案


推荐阅读