我正在尝试使用Spring Data的审计功能(与Spring Boot和Spring Data Rest结合使用),但审计字段未在保存时设置。所有保存都会导致尝试保存null" Created By。"
的约束异常根据spring data docs,我应该能够在我的实体上放置适当的审核注释(@ CreatedDate / etc),并制作AuditorAware<>可用于应用程序上下文。我知道我的审计员认识bean是通过在调试器中设置断点来创建的。
我的问题是:
1)我是否有必要创建一个AuditingEntityListener,或者我是否希望通过@EnableJpaAuditing提供一个? (它在关于java配置的文档中并不清楚)
2)以下代码中是否还有其他配置我缺少设置自动审核?
3)我正在调用从POST到Spring Data Rest的创建代码,将这个审计功能与Spring Data Rest结合使用有什么特别的警告吗?
@Entity
public class Tag implements Serializable {
// ... other fields omitted...
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
private Date created = new Date();
@CreatedBy
@Basic(optional = false)
@Column(name = "CREATED_BY", nullable = false, length = 24)
private String createdBy = "";
@LastModifiedDate
@Basic(optional = false)
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date updated = new Date();
@LastModifiedBy
@Basic(optional = false)
@Column(name = "UPDATED_BY", nullable = false, length = 24)
private String updatedBy = "";
// ... getters and setters were generated ...
配置:
@EnableJpaAuditing
@Configuration
public class AuditingConfig {
@Bean
public AuditorAware<String> createAuditorProvider() {
return new SecurityAuditor();
}
@Bean
public AuditingEntityListener createAuditingListener() {
return new AuditingEntityListener();
}
public static class SecurityAuditor implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
return username;
}
}
}
非常感谢任何帮助,谢谢!
答案 0 :(得分:10)
1)我是否有必要创建一个AuditingEntityListener,或者我是否希望通过@EnableJpaAuditing提供一个? (在关于java配置的文档中并不清楚)
答案:不,您不需要定义AuditingEntityListener
bean。相反,您需要在域类中指定@EntityListeners(AuditingEntityListener.class)
。
e.g。
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Tag implements Serializable {
}
2)以下代码中是否有其他配置我缺少设置自动审核?
答案:其他配置设置看起来不错。
3)我正在调用从POST到Spring Data Rest的创建代码,将这个审计功能与Spring Data Rest结合使用有什么特别的警告吗?
答案:我想不是。尝试以上建议的更改。它应该工作。