我已經找到了答案技術下面非常有用的透明管理的實體創建和更新的時間戳:透明地記錄在JPA實體的最後修改用戶
hard time setting autogenerated time with hibernate JPA annotations
我想知道,如果有什麼類似於記錄實體的創建和更新用戶?
@PreUpdate
@PrePersist
public void updateAudit() {
lastModifiedDate = new Date();
lastModifiedUser = ??;
if (dateCreated==null) {
dateCreated = new Date();
userCreated = ??;
}
}
儘管在示例新Date()
提供當前時間,我有這是訪問來自@PrePersist註解的方法上的實體很難找到,其中用戶ID可被存儲的位置(在登錄時) 。
用@Produces
方法注入@LoggedInUser
將是理想的,但是我的實體是由new()
創建的,而不是通過注入來創建,因此無法進行管理。
我很新,所以我希望我失去了一些明顯的東西。謝謝。
[編輯]回答以下從prunge導致代碼(有刪節)
@MappedSuperclass
public abstract class BaseEntity implements Serializable, Comparable<BaseEntity> {
@Version
private Timestamp updatedTimestamp;
private static ThreadLocal<Long> threadCurrentUserId = new ThreadLocal<Long>();
/* Called from entry point like servlet
*/
public static void setLoggedInUser(BaseEntity user) {
if (user!=null) threadCurrentUserId.set(user.getId());
}
@PrePersist
@PreUpdate
protected void onCreateOrUpdate() {
//Note we don't have to update updatedTimestamp since the @Version annotation does it for us
if(createdTimestamp==null) createdTimestamp = new Timestamp(new Date().getTime());;
lastUpdatedByUserId = threadCurrentUserId.get();
if(createdByUserId==null) createdByUserId = lastUpdatedByUserId;
}
你想要捕獲什麼用戶名?這是一個:網絡應用程序?胖客戶端?你使用的是什麼,如果有的話,安全框架? – MarkOfHall