使用 Hibernate 获取当前修改的实体和数据库实体快照

Get both the current modified entity and the database entity snapshot with Hibernate

我们使用 seam 作为 Java EE 框架。我有继承自 EntityHome 的控制器。当用户按下 'Save' 按钮时,我们有一个修改过的实体实例,但不会将此更改刷新到数据库中。

如何在两个状态(第一个 - 数据库状态,第二个用户修改状态)下检索此实体?

我尝试使用 enityManager.refresh(object),但它也重置了用户修改对象状态的所有更改。

想了两期,但不知道有没有更好的方案?

你可以这样做:

  1. 您使用深拷贝 serialization/deserialization 克隆当前附加的实体(这意味着您的所有实体都应该是可序列化的):

    MyEntity clonedObject = org.apache.commons.lang3.SerializationUtils.clone(object);
    
  2. 然后你刷新当前附加的对象:

    session.refresh(object);
    

现在您同时拥有修改后的对象(例如clonedObject)和原始实体版本(例如object)。

如果你想合并clonedObject,你可以简单地这样做:

object = session.merge(clonedObject);