我正在尝试在更新之前计算实体中的修改。
步骤2.1到2.3是通过我的MVC框架(Spring MVC)进行管理的,所以我实际上从未实际引用过没有更改的原始实体。
所以我现在要做的是以下内容:
// transaction is already started
public Modifications store(Entity updated) {
Entity original = entityManager.find(Entity.class, updated.getId());
Modifications mods = calculateModifications(original, updated);
entityManager.merge(updated);
return mods;
}
但遗憾的是,我从实体经理收到的实体与更新的实体相同(阅读==
)。
以下是问题:如何强制实体管理器再次从数据库加载实体而不分离我更新的实体?
我使用Hibernate作为我的持久性提供程序,但我希望尽可能地保持这个提供程序不可知。
答案 0 :(得分:2)
以下是与您的问题Hibernate: comparing current & previous record
类似的答案使用方法evict
从会话缓存中删除旧实例,然后检查calculateModifications
是否有从方法find
获得的新更新
答案 1 :(得分:0)
顺便说一句,如果您使用detach
,则可以使用EntityManager
。如下代码:
entityManager.detach(newOne);
Order oldOne = orderRepository.findById(orderId);
// compare newOne and oldOne
...