我有Spring MVC + JPA应用程序.
我在申请中有几个实体在不断变化.我希望能够审核这些变化.我发现有一个@Audited注释可以跟踪某些字段或整个实体的更改.我想知道是否有任何方法可以配置此跟踪选项 - 我希望能够跟踪更改内容以及更改者.还可以从SQL中的1个表中的多个实体进行更改吗?还可以跟踪@OneToMany实体中的字段的变化吗?
谢谢
是的,您可以跟踪所做的更改,更新的用户和时间戳.
Hibernate提供了@Audited用于维护实体版本的注释.
Spring提供@CreatedBy @LastModifiedBy @CreatedDate和 @LastModifiedDate注释,其中您需要提供使用AuditorAwarebean 更新的用户名.
要启用审核,
@EnableJpaAuditing配置类@Audited和@EntityListeners(AuditingEntityListener.class)实体AuditorAware<T> 提供用户名@Audited例
@Bean
public AuditorAware<String> createAuditorProvider() {
return () -> "username"; // should be from context/session
}
Run Code Online (Sandbox Code Playgroud)
对于每个实体,将创建另一个表来维护版本
{ENTITY_NAME}_AUD //可以覆盖审计表名称的前缀和后缀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<UserAddress> addresses;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6983 次 |
| 最近记录: |