2012-03-31 34 views
1

尋找建議,以便有效地維護AppEngine for Java中的實體的基本審計字段(通過對象化)。對於各種日期字段(dateCreated,dateModified,dateDeleted),@PrePersist屬性看起來是一個很好的選擇,但我也希望存儲創建,修改,刪除實體的用戶的ID。這最好留給數據訪問層嗎?AppEngine實體的審計字段

回答

1

如果您需要存儲的記錄不僅僅是您提到的日期,還可能需要創建一個審計對象並使用@Embed將其存儲在您正在審計的對象中。然後使用@PrePersist來更新這個對象。這將爲您提供跨對象的一致審計框架。

+0

如果我使用\ @PrePersist,如何獲得用戶ID?我們必須訪問它的唯一方法是通過用戶檢索服務從HttpSession中抓取它。向域實體注入某種服務以獲取此信息是否常見? – 2012-04-01 13:16:34

+0

是的。您可以從會話中獲取它或從cookie中讀取它。這完全取決於您的應用程序。通常,應用程序的DAO層將具有doUpdate(用戶,實體)的方法 – 2012-04-01 18:39:52

+0

我們有一個DAO層,但我不確定我喜歡將用戶傳遞給每個doUpdate方法的想法。 DAO層不應該內在地知道如何做到這一點? – 2012-04-07 22:11:44

0

恕我直言@PrePersist是一個可以執行此操作的好地方。

您也可能想要使用objectify's polymorphism - 這樣您可以擁有包含所有審計字段的基類並執行保存。比所有需要審計的類都會擴展這個基類。