我有一些類型的建築師問題自動灌裝實體屬性
我開發一個應用程序,基於Spring和Hibernate(註釋配置) 對於我的數據庫中每個表,我添加4個領域(?):createdBy和modifiedBy (字符串),創建和修改(日期時間)。分別每個實體類也有這個字段和getter/setter對。所以我想找到填充此字段的最佳實踐解決方案,而不是爲每個DAO額外的代碼添加。可能嗎?
我會很高興的任何提案
我有一些類型的建築師問題自動灌裝實體屬性
我開發一個應用程序,基於Spring和Hibernate(註釋配置) 對於我的數據庫中每個表,我添加4個領域(?):createdBy和modifiedBy (字符串),創建和修改(日期時間)。分別每個實體類也有這個字段和getter/setter對。所以我想找到填充此字段的最佳實踐解決方案,而不是爲每個DAO額外的代碼添加。可能嗎?
我會很高興的任何提案
當然可以。就在這個代碼添加到您所有的持久化實例的基類,並啓用標註處理:
@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;
}
CurrentUser
是ThreadLocal<String>
,讓我來指定哪些用戶開始它的操作的開始。這樣,任何被觸摸的對象都將包含正確的信息。
如果沒有註釋處理,請激活HBM文件中的相應選項。
看Spring AOP。 您可以爲DAO方法分配一個「攔截器」,以便攔截器首先處理對象,然後執行到DAO方法。
在攔截器中,您可以使用所需的數據填充對象。
一種可能性是定義一個Hibernate EventListener,它可以在每個實體刷新到數據庫之前填寫這些字段