JPA EntityManager无法正常工作

时间:2015-02-17 16:17:15

标签: java-ee jpa entitymanager

我知道这个问题已经发了好几个帖子,但是我面对这个问题,其他帖子的解决方案都没有。我疯了。 这是简单的代码:

@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,因此无法在其上创建交易以传递删除请求...

先谢谢。

1 个答案:

答案 0 :(得分:1)

ORM技术在两阶段交易中运作:

  1. 在调用commit之前,它们对内存缓冲区进行读写操作
  2. 调用commit后,对缓冲区所做的更改将转到实际数据库
  3. 您所看到的是对缓冲区所做的更改,即当您尝试在删除它之后找到该对象时,您只得到null,但是因为您没有调用commit,这些更改不会反映在数据库中。 / p>

    解决方案显然是使操作事务和调用提交。如果您认为这应该是一个独立的操作,而不是一组操作的一部分,那么您应该考虑重构代码。如果没有看到你所做的更多,我真的不能提供任何更多的建议抱歉!