JPA Audit Null CreatedBy

时间:2016-11-28 21:45:07

标签: mongodb spring-mvc jpa audit

我正在使用带有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)

0 个答案:

没有答案