jpa - 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”
有没有人遇到过这种情况?有什么建议吗?
解决方案
推荐阅读
- node.js - 为nodejs中的任何端点为每个用户运行一次函数
- java - 为什么会发生这种情况(Processing 和 UnfoldingMaps 的奇怪之处)
- redux - 切换到 babel 7 会导致 jest 显示“意外令牌”
- javascript - 您如何使用两个不同的 jQuery 版本,其中一个由 Chrome 扩展程序注入?
- python - 在Python中将数据框日期列转换为时间戳
- python - 根据停止递归级别修剪python字典
- laravel - 注销时管理 Laravel 护照令牌的最佳方法是什么?
- firebase - Firebase 限制每个查询一个“array-contains-any” - 如果我需要多个怎么办?
- c++ - 如何在 OMNET++ 中添加专门的命令行参数?
- vue.js - 使用 v-for 在 Vue js 中迭代 $data 的最佳方法是什么?