【问题标题】:How to save old and new values of columns into Audit table using Spring Data JPA如何使用 Spring Data JPA 将列的新旧值保存到审计表中
【发布时间】:2017-02-06 07:04:48
【问题描述】:

我正在使用Spring Boot,以及Spring Data JPAMS Sql server2014 数据库,用于将实体(javax.persistence)保存和更新到表中。

根据要求,我们需要审核所有表的每一列。所以我用各自的列创建了新表作为“审计”。但我不确定如何保存旧值和新值以及其他列。

spring 中是否有任何单独的 api 来支持这种功能?

create table Audit
(
  Id INT NOT NULL PRIMARY KEY,
  TableName VARCHAR (100)
  ColumnName VARCHAR (100)
  RowId INT,
  OldValue VARCHAR (100),
  NewValue VARCHAR (100),
  Type VARCHAR (100),
  ChangedDate DATETIME,
  ChangedBy VARCHAR (100),
);

其中“Type”表示 DML 操作的类型,“Old value & New value”列保存父表中列的先前值和现有值。

我能否知道审计实体的最佳方法,即将旧值和新值连同其他相关字段一起保存并更新到审计表中。

【问题讨论】:

    标签: java spring hibernate jpa spring-data-jpa


    【解决方案1】:

    查看 hibernate envers 它易于配置(您所要做的就是将您的实体标记为 @Auditable),它负责以下事项:

    1. 创建审计表
    2. 在插入/更新/删除实体时将数据插入审计表中
    3. 它提供了自己的查询语言,您可以使用它来获取实体中所有已更改的内容

    更新
    你也可以看看javers。我使用 javers 和 Hibernate 的EntityInterceptor 来捕获字段更改、旧值和新值的形式变化。有关详细信息,请参阅 javers Diff

    【讨论】:

    • 感谢 Sarvesh 的回复。我使用 Hibernate envers 和 4.3.3 版本实现了审计。我可以使用 Audited annoation 来审计实体。但是使用@AuditJoinTable 注释未插入/审核记录以加入表。
    • 您是如何生成审计架构的?通过将 hbm2ddl 设置为 auto 或 create,让 hibernate 自动创建审计模式。我相信你不需要为审计处理显式连接,hibernate(envers) 足够聪明。
    • 是的,hiberate everse 自动创建表,但是记录没有插入到连接表的审计表中。
    • 注意:我没有在我的 spring boot 中的 application.properties 文件中提到审计架构细节。
    • @SatishKonda 请不要将 cmets 用于新问题。只需创建一个新问题。这也将允许其他人找到问题(及其答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2015-01-20
    • 1970-01-01
    • 2021-04-24
    • 2019-03-29
    • 2016-06-02
    相关资源
    最近更新 更多