要有条件地审核实体,可以选择使用Integrators并扩展Envers事件列表。但我们可以有条件地审查一个领域或财产吗?
在我们的例子中,我们有一个blob列,为了避免增加审计表的数量,我们只想在条件有效时设置该列的值。有什么办法吗?
谢谢
如上所述,进行条件审计的当前和唯一方法是按照您的描述扩展Envers侦听器,通过Integrator注册自定义侦听器,并确保配置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
来避免下游问题,则不应将其视为有条件的。