我们有一个微网络服务环境,其中 AbstractAuditingEntity 来自另一个常见的微服务。我想用我自己定义的值覆盖这个抽象类的 @CreatedBy 属性。
下面给出了我的代码。
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractAuditingEntity {
@Column(name = "created_by", insertable = true, updatable = false, nullable = false)
@CreatedBy
private String createdBy;
@Column(name = "created_date", insertable = true, updatable = false, nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@CreatedDate
private DateTime createdDate;
@Column(name = "last_modified_by", nullable = false)
@LastModifiedBy
private String lastModifiedBy;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@LastModifiedDate
private DateTime lastModifiedDate;
// @Transient
public abstract Long getInternalId();
// @Transient
public abstract void setInternalId(Long internalId);
public DateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(DateTime createdDate) {
this.createdDate = createdDate;
}
public DateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(DateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
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;
}
}
我的域类就像
@Entity
@Table(name = "programs")
@AttributeOverride(name = "createdBy", column = @Column(name = "created_by"))
public class Program extends AbstractAuditingEntity {
@Id
@SequenceGenerator(name = "programs_seq", sequenceName = "programs_seq")
@GeneratedValue(generator = "programs_seq")
@Column(name = "internal_id", nullable = false)
private Long internalId;
private String programName;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
//Start getters & setters - auto generated by IDE
@Override
public Long getInternalId() {
return internalId;
}
@Override
public void setInternalId(Long internalId) {
this.internalId = internalId;
}
public String getProgramName() {
return programName;
}
public void setProgramName(String programName) {
this.programName = programName;
}
}
当我们尝试在数据库中持久化这个域对象时,我提供的用户定义值没有得到持久化,而是 Spring 框架仍然添加它自己的值。我已经尝试过 @AttributeOverride 但它在我的情况下不起作用。
提前感谢您的帮助。
最佳答案
我得到了如下解决方案。
@PrePersist
private void setCreateByNew() {
setCreatedBy("anonymousUser");
}
使用@PrePersist,我可以覆盖从通用框架获得的值。
关于spring - 如何在 Spring JPA 中重写 AbstractAuditingEntity 中的 @CreatedBY 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767768/