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

时间:2016-09-28 10:41:25

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

我正在使用Spring BootSpring 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),
);

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

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

1 个答案:

答案 0 :(得分:5)

查看hibernate envers,它易于配置(您只需要将您的实体标记为@Auditable),并注意以下事项:

  1. 创建审核表
  2. 插入/更新/删除实体时将数据插入审核表
  3. 它提供了自己的查询语言,您可以使用它来获取实体中已更改的内容
  4. <强>更新
    您还可以查看javers。我曾使用javers和Hibernate的EntityInterceptor来捕捉字段变化,旧值和新值的变化。有关详细信息,请参阅javers Diff