如何解决entityManager.getTransactionrollback分离实体?
根据Eval 2.0 Eval的JSR-000317持久性规范:
3.3.2交易回滚
对于事务范围的上下文和扩展的持久性上下文, 。实例的状态将是事务回滚时的实例状态。事务回滚通常会导致持久性上下文在回滚时处于不一致状态。特别地,版本属性的状态和所生成的状态(例如,所生成的主键)可能不一致。因此,以前由持久性上下文管理的实例(包括在该事务中成为持久性的新实例)可能无法以与其他分离对象相同的方式重用- 例如,它们在传递给合并操作时可能会失败。[32]
解决方法
我有以下代码:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test")
EntityManager entityManager = emf.createEntityManager()
User user = entityManager.find(User.class,0);
entityManager.getTransaction().begin();
entityManager.getTransaction().rollback();
entityManager.refresh(user);
这会在第四行引发IllegalArgumentException,提示“实体未管理”。如果我将第三行改为.commit()
而不是.rollback()
,那么一切似乎都可以正常工作。
这里发生了什么?我可以防止这种情况发生吗?
更新: @DataNucleus将我引向PersistenceContext。如何在代码中更改持久性上下文?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。