Как указано, текущий и единственный способ сделать Условный аудит - расширить прослушиватели 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
, чтобы избежать последующие проблемы при обновлении этой сущности в будущей транзакции.