【问题标题】:Insert to hibernate audit table on condition在条件下插入到休眠审计表
【发布时间】:2018-04-15 05:10:27
【问题描述】:

我正在使用休眠环境来审计我的实体。我有下一个字段的实体:

public class Settings   

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


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

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

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

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

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

【问题讨论】:

    标签: java hibernate audit hibernate-envers


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2013-03-30
      • 2014-09-04
      • 1970-01-01
      • 2016-12-11
      • 2011-03-11
      • 2012-08-26
      相关资源
      最近更新 更多