我们如何根据条件审计实体的字段?

时间:2019-04-16 04:19:43

标签: hibernate-envers

要有条件地审核实体,可以选择使用Integrators并扩展Envers事件处理程序。 但是我们可以有条件地审核字段或属性吗?

在我们的示例中,我们有一个blob列,并且为了避免增加审核表的数量,我们只想在条件有效时设置此列的值。有什么办法吗?

谢谢

1 个答案:

答案 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}}可以避免在以后的交易中更新该实体时出现下游问题。