2012-10-15 122 views
1

我正在尋找一個優雅的方式來實現下一個任務: 我有一個名爲Ticket的實體,它有一些字段,如:owner,createdTs,body ....,還有一個List實體將跟蹤票上執行的所有更改。
我的應用程序是用Strus2,Spring 3,Jpa + Hibernate構建的,我有一個服務類TicketService,它有save/updateTicket(Ticket ticket)方法。
我試圖實現一個方面@Before保存/更新方法,但我的問題是,我無法訪問票的舊值,以檢測更改並根據這些更改創建TicketHistory對象。
我嘗試了方面的方法,因爲我從許多其他方法訪問此方法,現在這些對象(Ticket和TicketHistory)緊密耦合。日誌域對象更改

有什麼想法嗎? 謝謝,
阿德里安

回答

1

既然你在使用Hibernate,有一個非常好的解決方案聲明:

Envers

Envers(爲 titiy 弗斯離子)會自動檢測上的變化用@Audited註解的實體,並在數據庫中創建一個歷史記錄。您甚至可以將自定義信息添加到修改版本的用戶,如進行更改的用戶。

查看Quickstart for Envers瞭解更多信息。

缺點是你必須更改一些代碼量,因爲不再需要TicketHistory了。較早版本的實體可通過AuditReader類訪問。

另請注意,使用Envers時,程序直接依賴於Hibernate,而不僅僅是JPA。如果你想改變你的持久性提供者(而不是經常發生這種情況),你會有更多的工作要做。

+0

嗨,感謝提示,我已經實現了使用envers,似乎工作正常。 –