JPA EntityManager 不工作
JPA EntityManager Not working
我知道这个问题已经发布了好几个帖子,但我正面临这个问题,其他帖子的解决方案都没有用。我要疯了。
这是简单的代码:
@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,所以我无法在其上创建事务来传递删除请求...
提前致谢。
ORM 技术在两阶段交易中运行:
- 在您调用 commit 之前,它们会读写内存缓冲区
- 调用 commit 后,对缓冲区所做的更改将对实际数据库进行更改
您看到的是对缓冲区所做的更改,即当您在删除对象后尝试查找该对象时,您只会得到 null,但是由于您还没有调用提交,这些更改不会反映在数据库中.
解决方案显然是使操作具有事务性并调用提交。如果您认为这应该是一个单独的操作,而不是一组操作的一部分,那么您应该考虑重构您的代码。没有看到你所做的更多,我真的不能提供更多的建议抱歉!
我知道这个问题已经发布了好几个帖子,但我正面临这个问题,其他帖子的解决方案都没有用。我要疯了。 这是简单的代码:
@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,所以我无法在其上创建事务来传递删除请求...
提前致谢。
ORM 技术在两阶段交易中运行:
- 在您调用 commit 之前,它们会读写内存缓冲区
- 调用 commit 后,对缓冲区所做的更改将对实际数据库进行更改
您看到的是对缓冲区所做的更改,即当您在删除对象后尝试查找该对象时,您只会得到 null,但是由于您还没有调用提交,这些更改不会反映在数据库中.
解决方案显然是使操作具有事务性并调用提交。如果您认为这应该是一个单独的操作,而不是一组操作的一部分,那么您应该考虑重构您的代码。没有看到你所做的更多,我真的不能提供更多的建议抱歉!