Spring 基于现场的审计
Field based auditing with Spring
在我的实际项目中(Spring Boot 2 with JPA on Hibernate)我需要实现基于字段的审计跟踪。如果用户更改任何字段,则 he/she 需要输入原因。如果更改了一个对象的多个字段,则每个更改都必须分别有一个原因文本。
审核方有2条要求:
- 如果我 select 一个字段,我必须列出所有更改及其原因。
- 如果我 select 主要(由多个其他对象构建)业务对象,我必须列出所有更改。
我不需要恢复任何旧状态。
我过去已经使用 Hibernate Envers、JaVer 库和 JPA 审计功能进行简单审计,其中更改是在对象级别而不是字段级别处理的。但是在实际情况下,我不知道应该往哪个方向深入挖掘。
Hibernate envrs 启用基于字段的审计。此外,您可以指定一个自定义修订实体,您可以在其中存储每个修订的额外信息,例如用户和原因。
JPA 审计不处理您的案件。它只是使您能够使用操作回调,例如@PrePersist 或@PostUpdate。
JaVer 可能是 Hibernate Envrs 的替代品,但由于您已经在使用 Hibernate,因此将 Envrs 集成为同一系列的工具会容易得多
在我的实际项目中(Spring Boot 2 with JPA on Hibernate)我需要实现基于字段的审计跟踪。如果用户更改任何字段,则 he/she 需要输入原因。如果更改了一个对象的多个字段,则每个更改都必须分别有一个原因文本。
审核方有2条要求:
- 如果我 select 一个字段,我必须列出所有更改及其原因。
- 如果我 select 主要(由多个其他对象构建)业务对象,我必须列出所有更改。
我不需要恢复任何旧状态。
我过去已经使用 Hibernate Envers、JaVer 库和 JPA 审计功能进行简单审计,其中更改是在对象级别而不是字段级别处理的。但是在实际情况下,我不知道应该往哪个方向深入挖掘。
Hibernate envrs 启用基于字段的审计。此外,您可以指定一个自定义修订实体,您可以在其中存储每个修订的额外信息,例如用户和原因。 JPA 审计不处理您的案件。它只是使您能够使用操作回调,例如@PrePersist 或@PostUpdate。 JaVer 可能是 Hibernate Envrs 的替代品,但由于您已经在使用 Hibernate,因此将 Envrs 集成为同一系列的工具会容易得多