Как мы можем проверить поле сущности в соответствии с условием? - PullRequest
0 голосов
/ 16 апреля 2019

Для условного аудита объекта существует возможность использования интеграторов и расширения списка событий Envers. Но можем ли мы провести аудит поля или свойства условно?

В нашем случае у нас есть столбец BLOB-объектов, и во избежание увеличения объема таблиц аудита мы хотим устанавливать значение этого столбца только тогда, когда условие действительно. Есть ли способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2019

Как указано, текущий и единственный способ сделать Условный аудит - расширить прослушиватели Envers, как вы описали, зарегистрировать свои настраиваемые прослушиватели через интегратор и убедиться, что Envers не пропустил регистрацию прослушивателей событий. шаг.

В качестве примера предположим, что вы расширили EnversPostUpdateEventListenerImpl:

public class CustomPostUpdateEventListener extends EnversPostUpdateEventListenerImpl {
  @Override
  public void onPostUpdate(PostUpdateEvent event) {
    if ( event.getEntity() instanceof YourCustomEntityType ) {
      if ( !isSpecialConditionSet( event ) ) {
        return;
      }
    }
    super.onPostUpdate( event );
  }

  private boolean isSpecialConditionSet(PostUpdateEvent event) {
    final Object conditionValue = event.getPersister()
        .getPropertyValue( event.getEntity(), "nameOfPropertyCondition" );
    /* check your condition and return true if you should not audit the entity */        
  }
}

При выполнении условного аудита следует учитывать одну вещь: когда PostInsertEvent для объекта запускается, не следует считать условным, если вы используете ValidityAuditStrategy, чтобы избежать последующие проблемы при обновлении этой сущности в будущей транзакции.

...