java - 根据条件插入到 hibernate 审计表

标签 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;
}

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

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

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

最佳答案

您需要做的是扩展EnversPostUpdateEventListenerImpl事件监听器类并添加逻辑来检查必要的实体类型和值,并决定是否调用父类(super class)来审核更新或不。

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

HHH-11326中有一些关于条件审计的想法这是 Envers 6.0 的暂定计划,您可以根据通过注释与实体绑定(bind)的 Hook 来影响审核。

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

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

关于java - 根据条件插入到 hibernate 审计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079337/

相关文章:

java - 何时关闭 JNDI 上下文

SQL Server 2012审计报告生成

java - 找不到 RuntimeBuiltinLeafInfoImpl 但它的 jar 已添加到 pom.xml

oracle - 使用 ColdFusion 11/Oracle 12c 生成 Hibernate 配置时出错

sql - 在 SQL Server 中实现审计表的建议?

javascript - 谷歌审计问题

Java正则表达式否定前瞻错误匹配

java - 在 Spring Boot 应用程序中从 mongo db 获取数据,其中要获取的集合名称和字段在运行时已知

java - 如何将mysql并入Jboss快速入门教程

java - 所有数据库查询的全局 hibernate 过滤器