如何在 JPA 应用程序中保留实体的编辑历史

How to keep a history of edit of Entities in a JPA application

JavaEE 和 JPA 应用程序需要记录用户所做的所有更改。

目前,对于所有的实体,都有记录createdBy和lastEditedBy属性的字段。然而,使用这些属性无法满足记录所有编辑的要求。

记录特定实体的所有编辑历史记录的最佳方式是什么?

我不使用 Spring。

您可以使用 Hibernate 的 Envers 来审计您的实体。它允许您跟踪对实体所做的所有更改 - 甚至是已删除的。很可能您已经在使用 Hibernates(作为 JPA 提供程序),因此集成应该没有问题。

https://hibernate.org/orm/envers/

您可以使用 Javers,这是一种与数据库和框架无关的工具,用于维护操作历史记录。

There are two big differences between JaVers and Envers:

  1. Envers is the Hibernate plugin. It has good integration with Hibernate but you can use it only with traditional SQL databases. If you chose NoSQL database or SQL but with another persistence framework (for example JOOQ) — Envers is not an option.

    On the contrary, JaVers can be used with any kind of database and any kind of persistence framework. For now, JaVers comes with repository implementations for MongoDB and popular SQL databases. Other databases (like Cassandra, Elastic) might be added in the future.

  2. Envers’ audit model is table-oriented. You can think about Envers as the tool for versioning database records.

    JaVers’ audit model is object-oriented. It’s all about objects’ Snapshots. JaVers saves them to the single table (or the collection in Mongo) as JSON documents with unified structure.

您也可以使用触发器和存储对象差异来实现此目的。

编辑: JaversAuditableAspect 用于任何类型的存储库。 它定义了使用方法级@JaversAuditable 注释注释的任何方法的切入点。如果您的存储库不受 Spring Data.

管理,请选择它
@Bean public JaversAuditableAspect javersAuditableAspect() { return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider()); }