2009-11-12 53 views
1

我有一些類型的建築師問題自動灌裝實體屬性

我開發一個應用程序,基於Spring和Hibernate(註釋配置) 對於我的數據庫中每個表,我添加4個領域(?):createdBy和modifiedBy (字符串),創建和修改(日期時間)。分別每個實體類也有這個字段和getter/setter對。所以我想找到填充此字段的最佳實踐解決方案,而不是爲每個DAO額外的代碼添加。可能嗎?

我會很高興的任何提案

回答

3

當然可以。就在這個代碼添加到您所有的持久化實例的基類,並啓用標註處理:

@PrePersist 
public void prePersist() 
{ 
    if (created == null) 
    { 
     created = updated = createCurrentTimestamp(); 
     createdBy = updatedBy = CurrentUser.get(); 
    } 
} 

@PreUpdate 
public void preUpdate() 
{ 
    updated = createCurrentTimestamp(); 
    updatedBy = CurrentUser.get(); 
} 

public static java.sql.Timestamp createCurrentTimestamp() 
{ 
    final long now = System.currentTimeMillis(); 
    final java.sql.Timestamp ts = new java.sql.Timestamp (now); 
    ts.setNanos(((int)(now % 1000)) * 1000000); 
    return ts; 
} 

CurrentUserThreadLocal<String>,讓我來指定哪些用戶開始它的操作的開始。這樣,任何被觸摸的對象都將包含正確的信息。

如果沒有註釋處理,請激活HBM文件中的相應選項。

0

Spring AOP。 您可以爲DAO方法分配一個「攔截器」,以便攔截器首先處理對象,然後執行到DAO方法。
在攔截器中,您可以使用所需的數據填充對象。

0

一種可能性是定義一個Hibernate EventListener,它可以在每個實體刷新到數據庫之前填寫這些字段