我正在使用带有mongodb的spring MVC并使用审计实体来保存创建和上一版本的用户和时间。所以我的AudtingEntity,所有对象都从中继承,就像这样:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.joda.time.DateTime;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* Base abstract class for entities which will hold definitions for created, last modified by and created,
* last modified by date.
*/
public abstract class AbstractAuditingEntity {
@CreatedBy
@Field("created_by")
@JsonIgnore
private String createdBy;
@CreatedDate
@Field("created_date")
@JsonIgnore
private DateTime createdDate = DateTime.now();
@LastModifiedBy
@Field("last_modified_by")
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String lastModifiedBy;
@LastModifiedDate
@Field("last_modified_date")
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private DateTime lastModifiedDate = DateTime.now();
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public DateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(DateTime createdDate) {
this.createdDate = createdDate;
}
public String getLastModifiedBy() {
return lastModifiedBy;
}
public void setLastModifiedBy(String lastModifiedBy) {
this.lastModifiedBy = lastModifiedBy;
}
public DateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(DateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
当我第一次保存对象时,它完美地工作,但是当我编辑它时,createdBy变为null,并且createdDate也会随更新日期一起更新。之所以发生这种情况,是因为我忽略了前端的这些属性,并且在保存时它们为空。可能的解决方案是在保存之前在DB中查找对象,然后将属性复制到更新的对象并保存。但是我不喜欢这个解决方案,因为需要为任何对象编写这个特定的代码。我想可能有更聪明的方法来解决这个问题,在某种程度上配置永远不会在创建后更新数据库中的这些字段。
我尝试在这两个字段上使用以下属性,但不起作用: @Column(updatable = false)