spring - 如何在 Spring JPA 中重写 AbstractAuditingEntity 中的 @CreatedBY 值

标签 spring hibernate hibernate-envers

我们有一个微网络服务环境,其中 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/

相关文章:

Spring MVC @RestController 和重定向

java - 服务器抛出 OptimisticLockException 后事务没有完全回滚

java - JPA/hibernate 大集合

java - hibernate :What makes JDBC connections expensive?

java - Hibernate Envers仅使用servlet保存用户名

spring - 通过 RedirectionAttributes 传递 BindingResult

java - 用于登录的简单易懂的 spring 应用程序

mysql - 如何解决MySQL由于hibernate envers审计而导致的死锁?

java - Spring boot、JOOQ、Flyway如何搭配使用?

java - Spring 3.x 和 Hibernate Envers