您目前在hibernate状态下使用spring-data抽象。如果查找返回新值,则表明spring-data已将对象附加到hibernate会话。
我认为您有三种选择:
- 在刷新当前季节之前,通过单独的会话/事务获取对象。这很尴尬,并且需要非常精细的配置。
- 在spring附加新对象之前获取以前的版本。这是完全可行的。您可以在将对象传递到存储库之前在服务层中进行操作。
save
当另一个感染具有已知的相同类型和ID时,您就不能将对象设为hibernate会话。在这种情况下使用merge
或evict
。 - 作为描述使用较低级别的Hibernate拦截器在这里。如您所见,
onFlushDirty
具有两个值作为参数。不过请注意,hibernate状态通常不会查询您以前的状态,只是保存一个已经持久的实体。取而代之的是,在数据库中发出一个简单的更新(不选择)。您可以通过在实体上配置select-before-update来强制选择。



