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

时间:2015-02-25 14:45:11

标签: java hibernate jpa orm seam

我们使用seam作为Java EE框架。我是从EntityHome继承的控制器。当用户按下“保存”按钮时,我们有一个修改过的实体实例,但是没有刷新这个更改到数据库。

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

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

我想两个会议,但我想知道,如果有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

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

    session.refresh(object);
    
  3. 现在您拥有修改后的对象(例如clonedObject)和原始实体版本(例如object)。

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

    object = session.merge(clonedObject);