假设我在JPA应用程序中有几种类型的实体,以及执行所有与数据库相关的操作的存储库。
有时它会从外部传递未附加的实体,我想获得它们的附加副本 (例如,要保留包含对此实体的引用的新实体,或访问延迟属性)。
EntityManager.refresh(entity)
不适用于未附加的对象。 EntityManager.merge(entity)
将复制分离实体的当前状态,而不是从我想要的数据库中获取当前值。 EntityManager.find(entity.getId(), entityClass)
有效,这就是我现在所做的,但它取决于实体的类型(尽管我现在想到它,EntityManager.find(entity.getId(), entity.getClass())
更好)。还有其他方法吗?
答案 0 :(得分:1)
您可以合并和刷新:
entityManager.refresh(entityManager.merge(entity));
merge
会为您提供一个托管实体,然后您可以使用refresh
从DB中获取值。
此代码应适用于附加实体和分离实体。