java - 如何使用 Spring Data JPA 将列的新旧值保存到 Audit 表中

标签 java spring hibernate jpa spring-data-jpa

我正在使用 Spring BootSpring Data JPAMS Sql server2014 数据库来保存和更新实体(javax.持久性)到表中。

根据要求,我们需要审核所有表的每一列。所以我创建了新表作为“审计”并包含相应的列。但我不知道如何保存新旧值和其他列。

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”列保存父表中列的先前值和现有值。

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

最佳答案

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

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

更新
您还可以查看javers 。我曾将 Javers 与 Hibernate 一起使用 EntityInterceptor以字段变化、旧值和新值的形式捕获变化。参见哈弗斯Diff了解更多详情。

关于java - 如何使用 Spring Data JPA 将列的新旧值保存到 Audit 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745153/

相关文章:

java - 从 JPA/Hibernate 调用 Sybase 存储过程

java - 每次部署时都将图像、CSS 文件等包含在 WAR 文件中吗?

java - 如何将 Eclipse 项目的 "Java Build Path"部分中引用的 jar 包含在使用 build.xml 文件通过 Ant 生成的 jar 文件中

spring - 微服务 : security and architectural issue for internal services

java - 如何在 Hibernate/JPA 中的映射/子表上删除现有记录并插入新记录

hibernate - 无法使用从同一 Maven 原型(prototype)创建的两个 SpringMVC Web 应用程序启动 Tomcat 服务器

mysql - JPA/Hibernate 中查询返回 null,但 mysql 中不返回 null

java - 如何通过返回数组来打印数组中的唯一元素?

java - 强制发布依赖性,但来自同一构建的模块除外

java - Spring 3 中的 maven 多模块配置,明智与否?