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

Sat*_*nda 0 java spring hibernate jpa spring-data-jpa

我正在使用Spring Boot,使用Spring Data JPAMS Sql server2014数据库来保存和更新实体(javax.persistence)到表中的过程.

根据要求,我们需要审核所有表的每一列.所以我用相应的列创建了新表作为"Audit".但我不知道如何保存旧的和新的值和其他列.

春天是否有任何单独的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),
);
Run Code Online (Sandbox Code Playgroud)

其中"类型"表示DML操作的类型,"旧值和新值"列保存父表中列的前一个和现有值.

我是否可以了解审核实体的最佳方法,即将旧值和新值以及其他相关字段保存并更新到Audit表中.

Sar*_*bey 6

看看hibernate envers它易于配置(你所要做的就是将你的实体标记为@Auditable)并注意以下事项:

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

更新
您还可以查看javers.我曾使用javers和Hibernate的EntityInterceptor来捕获字段更改,旧值和新值的更改.有关更多详细信息,请参阅javers Diff.