使用 Hibernate 获取当前修改的实体和数据库实体快照
Get both the current modified entity and the database entity snapshot with Hibernate
我们使用 seam 作为 Java EE 框架。我有继承自 EntityHome 的控制器。当用户按下 'Save' 按钮时,我们有一个修改过的实体实例,但不会将此更改刷新到数据库中。
如何在两个状态(第一个 - 数据库状态,第二个用户修改状态)下检索此实体?
我尝试使用 enityManager.refresh(object),但它也重置了用户修改对象状态的所有更改。
想了两期,但不知道有没有更好的方案?
你可以这样做:
您使用深拷贝 serialization/deserialization 克隆当前附加的实体(这意味着您的所有实体都应该是可序列化的):
MyEntity clonedObject = org.apache.commons.lang3.SerializationUtils.clone(object);
然后你刷新当前附加的对象:
session.refresh(object);
现在您同时拥有修改后的对象(例如clonedObject
)和原始实体版本(例如object
)。
如果你想合并clonedObject
,你可以简单地这样做:
object = session.merge(clonedObject);
我们使用 seam 作为 Java EE 框架。我有继承自 EntityHome 的控制器。当用户按下 'Save' 按钮时,我们有一个修改过的实体实例,但不会将此更改刷新到数据库中。
如何在两个状态(第一个 - 数据库状态,第二个用户修改状态)下检索此实体?
我尝试使用 enityManager.refresh(object),但它也重置了用户修改对象状态的所有更改。
想了两期,但不知道有没有更好的方案?
你可以这样做:
您使用深拷贝 serialization/deserialization 克隆当前附加的实体(这意味着您的所有实体都应该是可序列化的):
MyEntity clonedObject = org.apache.commons.lang3.SerializationUtils.clone(object);
然后你刷新当前附加的对象:
session.refresh(object);
现在您同时拥有修改后的对象(例如clonedObject
)和原始实体版本(例如object
)。
如果你想合并clonedObject
,你可以简单地这样做:
object = session.merge(clonedObject);