字段更改的休眠审计日志

m L*_*zad 5 java hibernate hibernate-envers spring-data audit-logging

如何将实体的更改记录到日志文件中?考虑我有Person这样的。

import org.hibernate.envers.Audited;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;

@Entity
@Audited
public class Person {
    @Id
    @GeneratedValue
    private int id;

    private String name;
    private String surname;
// add getters, setters, constructors, equals and hashCode here
}
Run Code Online (Sandbox Code Playgroud)

和改变现有的代码 Person

Person p1 = new Person("name-1", "surname-1");
personRepository.save(p1);
Person p2 = personRepository.findOne(1L);
p2.setName("new-name");
personRepository.save(p2);
Run Code Online (Sandbox Code Playgroud)

我怎么会有

  • 旧实体
  • 新实体
  • 字段列表已更改(类似于Diffable的结果)

在我的日志文件中?我知道envars可以在 db 中存储更改并让我稍后提取它们,AuditReader但我喜欢将更改存储在 Json 文件中以将它们发送到第三方应用程序(如 Elastic)。

小智 1

您可以通过实现来编写自定义拦截器org.hibernate.EmptyInterceptor。它具有使用实体的旧快照和新快照进行更新/插入/删除的回调。

请参阅这篇文章了解更多详细信息