0

我有下面的 JPA 实体,我想使用 @PrePersist 和 @PreUpdate 来帮助在 Spring 上下文中使用当前用户设置 lastUpdatedBy 字符串,但我不知道如何从实体访问该信息水平上下文。有任何想法吗?

public abstract class BaseEntity {
  private Date createdDate;
  private String lastUpdatedBy;

    @Column(name = "LAST_UPDATED_BY")
    public String getLastUpdatedBy() {
        return lastUpdatedBy;
    }

    public void setLastUpdatedBy(String lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }

  @Temporal(TemporalType.TIMESTAMP)
  @Column(name="CREATED_DATE")
  public Date getCreatedDate() {
    return createdDate;
  }

  public void setCreatedDate(Date created) {
    if (created != null) {
      this.createdDate = created;
    }
  }


  @PrePersist
  protected void onCreate() {
    createdDate = new Date();
    //lastUpdatedBy =  //need to access Spring user here
  }

 @PreUpdate
    public void onUpdate() {
      updatedDate = new Date();
      //lastUpdatedBy =  //need to access Spring user here
    }

}
4

1 回答 1

3

解决方案可以是Good way to access Spring singleton from within domain objects 中定义的解决方案?访问 Spring 上下文。
在您的上下文中,定义一个CurrentUserHolder定义为在 @Pre/@Post 函数中使用的单例 bean 访问的 bean ApplicationContext.getBean()
CurrentUserHolderbean 包含当前用户名,其值由应用程序管理(可以在启动后或更改用户后设置)。
在 Spring-batch 中跨步骤传递数据是一种常见的解决方案。

希望能有所帮助。

于 2013-08-26T22:29:33.763 回答