java - 在 JPA 中刷新实体

标签 java jpa jpa-2.0

我对如何刷新数据库中已有实体的状态感到困惑。更具体地说,假设我有一个“实体”,使用这样的代码:

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
entityManager.close();

自从我关闭了 EntityManager 之后,我的实体实例就被分离了。现在假设我有其他对象使用这个实体实例。如果我想从数据库中获取这个实体的新状态,我几乎不能使用 em.refresh() 因为实体是分离的。 em.merge() 方法返回一个托管实例,因为它不是我的对象的同一个实例,所以这可能是个问题。我可以预见两种解决方案:

  1. 在我的实体对象中创建一个新方法,使用给定的实体实例更新其状态。
  2. 不关闭实体管理器(暗示!??)

那么,在这种情况下我应该怎么做?如何在不丢失其他对象对它的所有引用的情况下刷新我的实体对象的状态?想法?

最佳答案

如果实体 A 引用分离的实体 B,则合并 B 返回 B',并刷新 B'。如果合并 A,A 会将其对 B 的引用更改为 B'。

A ---> B --(merge)--->B'
                    (refresh)
                    /
merge A -----------/

关于java - 在 JPA 中刷新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188218/

相关文章:

java - Android O - 通知 channel 和 NotificationCompat

java - Jersey 将 "application.wadl"文件存储在哪里?

java - NamedParameterJdbcTemplate 查询方法返回错误的整数值

java - 配置 Hibernate 以使用重命名的 persistence.xml

java 用括号分割并保留分隔符 - RegEx

java - 如何国际化 Hibernate 实体

java - 在 Java 中,使用 JPA2,我应该使用哪个类来保存日期信息?

java - JPA:具有复合主键的持久实体

hibernate - JPA/hibernate : Can you create a join query on an specific MapKey?

java - 部署ear时EntityManagerFactory在Weblogic中关闭