JPA-使用EntityManager remove()方法的奇怪行为

时间:2019-02-20 12:00:47

标签: jpa java-ee entitymanager

我处于配置(JTA-CMT)中,在该配置中,创建实体对象后必须将其删除。找到它后,我使用em.remove(object),但是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”

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

0 个答案:

没有答案