审核实体JPA中的更改

我有Spring MVC + JPA应用程序。

我有几个实体正在不断变化。 我希望能够审核这些变化。 我发现有一个@Audited注释跟踪某些字段或整个实体的更改。 我想知道是否有任何方法可以配置此跟踪选项 – 我希望能够跟踪更改的内容以及更改者。还可以从SQL中的1个表中的多个实体进行更改吗? 还可以跟踪实体中@OneToMany字段的变化吗?

谢谢

是的,您可以跟踪所做的更改,更新的用户和时间戳。

Hibernate提供@Audited注释来维护实体版本。

Spring提供@CreatedBy @LastModifiedBy @CreatedDate@LastModifiedDate注释,其中您需要提供使用AuditorAware bean更新的用户名。

要启用审核,

  1. 应该在配置类上添加@EnableJpaAuditing
  2. 实体上的@Audited@EntityListeners(AuditingEntityListener.class)
  3. AuditorAware提供用户名
  4. 儿童实体应注明@Audited

 @Bean public AuditorAware createAuditorProvider() { return () -> "username"; // should be from context/session } 

对于每个实体,将创建另一个表来维护版本

  1. {ENTITY_NAME}_AUD //可以覆盖审核表名称的前缀和后缀
  2. REVINFO

下面是一个与hibernate和spring审计的一对多关系的例子

UserInfo.java

 @Audited @Entity @EntityListeners(AuditingEntityListener.class) public class UserInfo extends AuditInfo { @Id @GeneratedValue private Long id; @Column private String name; @OneToMany(mappedBy = "userInfo", fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List addresses; } 

UserAddress.java

 @Entity @Audited @EntityListeners(AuditingEntityListener.class) public class UserAddress extends AuditInfo { @Id @GeneratedValue private Long addressId; @ManyToOne @JoinColumn(name = "id", nullable = false) private UserInfo userInfo; @Column private Long no; @Column private String street; } 

AuditInfo.java

 @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class AuditInfo { @CreatedBy private String createdBy; @LastModifiedBy private String updatedBy; @CreatedDate private LocalDateTime createdOn; @LastModifiedDate private LocalDateTime updatedOn; }