Переопределить функцию аудита Hibernate Envers - PullRequest
0 голосов
/ 10 февраля 2020

Я использую 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. modify_user и modify_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);
  }
}
...