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

标签 java hibernate jpa orm seam

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

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

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

我考虑了两次 session ,但我想知道是否有更好的解决方案?

最佳答案

你可以这样做:

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

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

    session.refresh(object);
    

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

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

object = session.merge(clonedObject);

关于java - 使用 Hibernate 获取当前修改的实体和数据库实体快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721966/

相关文章:

java - 外键无父错误

java - 获取错误 : Unknown service requested [org. hibernate.boot.registry.classloading.spi.ClassLoaderService]

java - 持久化实体时出现 SQLServerException - 索引超出范围

java - 无法访问实体类中的字段

hibernate - 重复结果休息服务 Spring boot

java - 在具有相同密度的不同 Android 设备上不同的 throw (滑动)速度

java - JSplitPane 右侧组件的背景图像

java进程间通信

java - 在Android应用程序中定义位图的大小

java - 使用 JPA 时如何在没有主键的情况下映射数据库 View