在条件下插入休眠审计表

时间:2017-11-02 15:44:38

标签: java hibernate audit hibernate-envers

我正在使用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;
}

它包含键值对。此表中的某些字段会自动更新。问题是:是否可以插入或不插入记录到_AUDIT表中,具体取决于'键'的值。属性? 例: 我的表中有记录:

|KEY          |VALUE     |VERSION
_________________________________
|laskCheckDate|12-01-2017|0
|numberOfsmth |3         |0

如果更新/删除了numberOfsmth,我想将记录插入_AUDIT表,但是如果更新laskCheckDate则不插入。

1 个答案:

答案 0 :(得分:1)

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

不幸的是,上述方法对新手用户来说有点干扰,如果你不熟悉Hibernate ORM和Envers,我肯定不会建议这样做。

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

如果您决定继续前进并扩展5.x中的侦听器,请注意您应始终允许实体的INSERT发生。如果您正在使用ValidityAuditStrategyUPDATE期望表中存在INSERT修订版类型,或者策略断言,则这一点变得非常重要。

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