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

解決策は、ドメイン オブジェクト内から Spring シングルトンにアクセスする良い方法ですか? で定義されているものにすることができます。Spring コンテキストにアクセスします。
コンテキストで、CurrentUserHolderを使用して @Pre/@Post 関数でアクセスされるシングルトン Bean として定義された Bean を定義しますApplicationContext.getBean()
CurrentUserHolderbean には現在のユーザー名が含まれており、その値はアプリケーションから保持されます (起動後またはユーザー変更後に設定できます)。
ステップ間でデータを渡すことは、Spring-batch の一般的なソリューションです。

希望が助けになります。

于 2013-08-26T22:29:33.763 に答える