3
我对如何刷新已存在于数据库中的实体的状态感到困惑。作为更具体的,假设我有“实体”坚持用这样的代码:刷新JPA实体
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
entityManager.close();
自从我关闭了我的EntityManager实体实例被分离。现在假设我有其他对象使用这个实体的实例。如果我想从数据库中获取这个实体的新状态,我几乎不能使用em.refresh(),因为实体是分离的。 em.merge()方法返回一个托管实例,因为它不是我的对象的同一个实例,这可能是一个问题。我可以预见两种解决方案:
- 在我的实体对象中创建一个新方法,该方法使用给定的实体实例更新其状态。
- 没有关闭实体管理器(意义!?)
所以,我应该在这种情况下怎么办?如何刷新我的实体对象的状态而不会丢失其他对象的所有引用?想法?
有关您正在尝试执行的操作的更多信息,以及您为什么关心此特定实例保持最新状态可能会有帮助。一般来说,最好通过使用内存中的L2缓存并仅使用entityManager.find()来实现,而不是试图维护自己。还可以选择扩展EntityManager的范围以适应您的工作单元。 – Affe
我有一个单身模型,我的应用程序是分布式的。我想知道其他客户端中的任何更改都保留在数据库中,因此我可以更新我的模型实例。但是,我不能失去实体实例,因为程序的其他部分可能会使用该实例(例如树视图)。 – tproenca