根据条件插入到休眠审计 table

Insert to hibernate audit table on condition

我正在使用 hibernate envers 来审计我的实体。我有下一个字段的实体:

public class Settings   

    @Id
    @Column(length = 80)
    private String key;


    @NotNull
    @Column(length = 1200)
    private String value;

    @Version
    @Column(columnDefinition = "numeric")
    private Integer version;
}

它包含键值对。此 table 中的某些字段会自动更新。问题是:是否可以根据 'key' 属性 的值将记录插入或不插入到 _AUDIT table 中? 例子: 我的table:

中有记录
|KEY          |VALUE     |VERSION
_________________________________
|laskCheckDate|12-01-2017|0
|numberOfsmth |3         |0

如果 numberOfsmth 是 updated/deleted,我想将记录插入到 _AUDIT table,但如果更新了 laskCheckDate,则不插入。

您需要做的是扩展 EnversPostUpdateEventListenerImpl 事件侦听器 class 并添加您的逻辑以检查必要的实体类型和值并决定是否调用超级 class 是否审核更新。

不幸的是,上述方法对新手用户来说有点干扰,如果您不是非常熟悉 Hibernate ORM 和 Envers,我当然不建议这样做。

HHH-11326 中有一些关于条件审计的想法,暂定用于 Envers 6.0,您可以在其中根据通过注释绑定到实体的挂钩来影响审计。

如果您决定继续前进并扩展 5.x 中的侦听器,请注意您应该始终允许实体的 INSERT 发生。如果您使用 ValidityAuditStrategy,这将变得非常重要,因为 UPDATE 期望 table 中存在 INSERT 修订类型,否则策略断言。

如果您想要控制的只是 UPDATE,那么无论您采用哪种策略,这对您来说都不是问题。