我've dynamoDB database, in which I'有一个名为 user
的表 . 我想在此表中记录审核( CreatedBy
, LastModifiedBy
, CreatedDate
, LastModifiedDate
) .
我发现JPA审核(from here)和MongoDB审核分别带有注释 @EnableJpaAuditing
和 @EnableMongoAuditing
. 但显然他们没有使用dynamoDB .
这是我的审计抽象类:
@DynamoDBDocument
public abstract class PQSSAbstractAuditingEntity implements Serializable{
@CreatedBy
@JsonIgnore
@DynamoDBAttribute
private String createdBy;
@LastModifiedBy
@JsonIgnore
@DynamoDBAttribute
private String lastModifiedBy;
@CreatedDate
@JsonIgnore
@DynamoDBAttribute
private Date createdDate;
@LastModifiedDate
@JsonIgnore
@DynamoDBAttribute
private Date lastModifiedDate = new Date();
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getLastModifiedBy() {
return lastModifiedBy;
}
public void setLastModifiedBy(String lastModifiedBy) {
this.lastModifiedBy = lastModifiedBy;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public Date getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(Date lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
我've assigned dates to respective fields but I' ve设置 createdBy
和 lastModifiedBy
,具体取决于登录用户 . 因此,当在数据库中添加新条目时,我将在运行时动态获取 . 我知道如何静态设置这些字段,但问题是如何在运行时使注释知道这些更改 .
正如我所提到的,我为JPA和mongo找到了 AuditAware
. 我需要为dynamoDB提供相同的功能 .
任何帮助将不胜感激 . 因为我是Spring的新手 .
2 回答
这个问题已经有几年了,但是如果有人也有这个问题,那么以下的解决方案就可以了 .
问题是,
@EnableDynamoDBAuditing
和@EnableDynamoDBRepositories
无法正常工作 . 要解决此问题,您必须将两个注释添加到配置类,创建AuditorAware
和DateTimeProvider
beans并手动将所有实体/文档添加到DynamoDBMappingContext
.PersistenceConfiguration.java
YourEntity.java
我知道还有一些其他的解决方案,如
@DynamoDBAutoGeneratedTimestamp
和他们的策略的使用,但在我看来,这是关于使用 spring 最干净的解决方案 .注释
@DynamoDBAutoGeneratedTimestamp
可与DynamoDBAutoGenerateStrategy
一起用于审核项目 .Strategy CREATE (Use this for Create audit):-
Strategy ALWAYS (Use this if you want last modified date):-
如果您想同时创建时间戳和上次修改的时间戳,请创建两个不同的属性 . 一个属性应该使用CREATE策略,而另一个应该使用ALWAYS策略 .
AutoGeneratedTimeStamp