我处于配置(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”
有人遇到这种情况吗?有什么建议吗?