我知道这个问题已经发了好几个帖子,但是我面对这个问题,其他帖子的解决方案都没有。我疯了。 这是简单的代码:
@Override
public void delete(Module module) {
System.out.println(this.findById(module.getId()));
em.remove(em.contains(module) ? module : em.merge(module));
System.out.println(this.findById(module.getId()));
}
这是控制台的输出:
com.btoc.flowrepository.domain.Module@746d23
null
但是当我在基地看时,线仍然在那里。知道为什么吗?!以及如何解决?
PS:我使用共享EM,因此无法在其上创建交易以传递删除请求...
先谢谢。
答案 0 :(得分:1)
ORM技术在两阶段交易中运作:
您所看到的是对缓冲区所做的更改,即当您尝试在删除它之后找到该对象时,您只得到null,但是因为您没有调用commit,这些更改不会反映在数据库中。 / p>
解决方案显然是使操作事务和调用提交。如果您认为这应该是一个独立的操作,而不是一组操作的一部分,那么您应该考虑重构代码。如果没有看到你所做的更多,我真的不能提供任何更多的建议抱歉!