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

问题描述 投票:0回答:1

要有条件地审核实体,可以选择使用Integrators并扩展Envers事件列表。但我们可以有条件地审查一个领域或财产吗?

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

谢谢

hibernate-envers
1个回答
0
投票

如上所述,进行条件审计的当前和唯一方法是按照您的描述扩展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来避免下游问题,则不应将其视为有条件的。

© www.soinside.com 2019 - 2024. All rights reserved.