我们如何根据条件审计实体的字段?
How can we audit a field of an entity according to a condition?
要有条件地审计一个实体,可以选择使用 Integrators 和 extends Envers 事件监听器。
但是我们可以有条件地审核字段或 属性 吗?
在我们的例子中,我们有一个 blob 列,为了避免审计表的体积增加,我们希望仅在条件有效时设置此列的值。有什么办法吗?
谢谢
如前所述,目前唯一的条件审计方法是按照您的描述扩展 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
来避免在未来事务中更新该实体时出现下游问题,则被视为有条件的。
要有条件地审计一个实体,可以选择使用 Integrators 和 extends Envers 事件监听器。 但是我们可以有条件地审核字段或 属性 吗?
在我们的例子中,我们有一个 blob 列,为了避免审计表的体积增加,我们希望仅在条件有效时设置此列的值。有什么办法吗?
谢谢
如前所述,目前唯一的条件审计方法是按照您的描述扩展 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
来避免在未来事务中更新该实体时出现下游问题,则被视为有条件的。