Spring Mongo 审计不工作@CreatedDate @CreatedBy

Dev*_*per 4 java auditing spring-data-mongodb

我正在使用 Spring Mongo Auditing 和 @CreatedDate @CreatedBy 不起作用,但 @LastModifiedDate 和 @LastModifiedBy 工作正常。

我在配置类上添加了 @EnableMongoAuditing,并定义了 AuditAware。

@Component("securityAuditorAware")
public class SecurityAuditorAware implements AuditorAware<String> {

 @Override
 public Optional<String> getCurrentAuditor() {
  return Optional.ofNullable(SecurityUtils.getUserPrincipal()).map(AuthenticatedUser::getIssuer);
 } 
}
Run Code Online (Sandbox Code Playgroud)

审核类别为:

@Document
public class Template  {

 @Id
 private UUID id = UUID.randomUUID();

 @CreatedDate
 private Date createdOn;
 @LastModifiedDate
 private Date modifiedOn;
 @CreatedBy
 private String createdBy;
 @LastModifiedBy
 private String modifiedBy;
}
Run Code Online (Sandbox Code Playgroud)

当我保存文档时,它在createdOncreatedBy中都放入了null,但在modifiedOnmodifiedBy中都放入了正确的值

谢谢您的帮助

小智 6

如果你的Entity没有继承Persistable接口,你应该定义一个用(org.springframework.data.annotation.Version)标记的字段@Version

@Document
public class Template {

 @Id
 private UUID id = UUID.randomUUID();

 @CreatedDate
 private Date createdOn;
 @LastModifiedDate
 private Date modifiedOn;
 @CreatedBy
 private String createdBy;
 @LastModifiedBy
 private String modifiedBy;
 @Version
 private Integer version;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您的实体继承Persistable接口,您应该实现逻辑来检测实体以前从未被持久化。

有关更多信息,您可以检查两个类:PersistentEntityIsNewStrategyPersistableIsNewStrategy