Java 覆盖休眠环境';审核功能

Java 覆盖休眠环境';审核功能,java,hibernate,hibernate-envers,Java,Hibernate,Hibernate Envers,我使用的是Hibernate 5.4,同时启用了Envers ValidityAuditStrategy。我需要从另一个数据库传输数据,该数据库的每个表中都有审计列。在从源数据库传输数据的同时,我还使用Hibernate来持久化迁移的数据。问题是,在持久化数据时,我需要将审核列(create_date、create_user、modify_date、modify_user)设置为源数据库(creator、lastModifyDate和lastModifyBy)中的值,但Envers会用登录用户的

我使用的是Hibernate 5.4,同时启用了Envers ValidityAuditStrategy。我需要从另一个数据库传输数据,该数据库的每个表中都有审计列。在从源数据库传输数据的同时,我还使用Hibernate来持久化迁移的数据。问题是,在持久化数据时,我需要将审核列(create_date、create_user、modify_date、modify_user)设置为源数据库(creator、lastModifyDate和lastModifyBy)中的值,但Envers会用登录用户的数据覆盖这些列的数据。但我需要将审计数据保存在源数据库中,仅用于迁移过程

到目前为止,我所做的是使用EnversPostInsertEventListenerImpl。但是,当我注册我的自定义EnversPostInsertEventListenerImpl并尝试覆盖源数据库中的审核列时,Envers只允许我设置create_user和create_date。修改用户和修改日期由当前会话信息设置

你有什么建议吗

public class MyEnversPostInsertEventListener extends EnversPostInsertEventListenerImpl {

  public MyEnversPostInsertEventListener(EnversService enversService) {
    super(enversService);
  }

  @Override
  public void onPostInsert(PostInsertEvent event) {
    BaseObject baseObject = (BaseObject) event.getEntity();
    if (baseObject != null && baseObject.isMigrating()) {
      if (baseObject instanceof Cluster) {
        Cluster cluster = (Cluster) baseObject;

        cluster.setCreateUser(cluster.getCreator());
        cluster.setCreateDate(cluster.getLastModifyDate());
        cluster.setModifyUser(cluster.getLastModifyBy());
        cluster.setModifyDate(cluster.getLastModifyDate());
      }
    }

    super.onPostInsert(event);
  }
}

这些字段在实体中的映射方式如何?在此实现之前,集群的createUser、createDate、modifyUser和modifyDate属性都是使用会话信息设置的。在添加此实现以使用从旧数据源继承的其他列手动覆盖审核信息后,我只能相应地使用creator和lastModifyDate属性覆盖createUser和createDate属性。modifyDate和modifyUser属性无法覆盖,envers始终将它们设置为当前会话信息。为了简化问题,我将使用场景再次编写。假设您有一个旧数据库,其中的所有表都有自己的审计列,这些列不由Hibernate Envers管理。您希望将此数据库迁移到一个新数据库,该数据库的表的审核列由Hibernate envers管理。在迁移过程中,您希望用旧数据库表的审核列覆盖新数据库表的审核列。另外,请注意,此迁移过程由Hibernate和Hibernate envers管理。因此,如何使用旧审核列的值设置这些新审核列显示这些字段在实体中的映射情况?在此实施之前,集群的createUser、createDate、modifyUser和modifyDate属性都是使用会话信息设置的。在添加此实现以使用从旧数据源继承的其他列手动覆盖审核信息后,我只能相应地使用creator和lastModifyDate属性覆盖createUser和createDate属性。modifyDate和modifyUser属性无法覆盖,envers始终将它们设置为当前会话信息。为了简化问题,我将使用场景再次编写。假设您有一个旧数据库,其中的所有表都有自己的审计列,这些列不由Hibernate Envers管理。您希望将此数据库迁移到一个新数据库,该数据库的表的审核列由Hibernate envers管理。在迁移过程中,您希望用旧数据库表的审核列覆盖新数据库表的审核列。另外请注意,这个迁移过程是由Hibernate和Hibernate envers管理的。所以,如何用旧的审计列的值设置这些新的审计列呢