要有条件地审核实体,可以选择使用Integrators并扩展Envers事件处理程序。 但是我们可以有条件地审核字段或属性吗?
在我们的示例中,我们有一个blob列,并且为了避免增加审核表的数量,我们只想在条件有效时设置此列的值。有什么办法吗?
谢谢
答案 0 :(得分:0)
如前所述,进行有条件审核的当前唯一方法是按照您的描述扩展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
被解雇时,如果您使用{ {1}}可以避免在以后的交易中更新该实体时出现下游问题。