2013-04-30 61 views
3

我需要審計我的一些數據庫表上的所有更改。例如,對於給定的員工,我需要知道所有地址以及該字段被修改的日期。其實我使用Spring Data,Hibernate和JPA。一個好的選擇是使用休眠Envers,但問題是我無法使用Spring Data獲取歷史記錄。另一種選擇是創建一個Employee_history表,但我沒有辦法從兩個不同的表中獲取Employee記錄(我想在Employee表中插入,但從Employee和Employee_history中獲取數據)。有沒有其他方法可以實現這一點?審計數據庫記錄隨着Spring數據的變化

回答

3

您必須回答的第一個問題應該是您需要的審覈級別。是一個簡單的更改列表足夠了嗎?字符串表示是否足夠好?或者你是否希望能夠支持你的實體的修訂,在那裏你可以返回並獲取修訂版X的數據「沒有任何麻煩」?

如果更改的列表足夠了,並且您仍然使用休眠模式,那麼我會選擇HibernateEventListener(而不是JPA),因爲您已經獲得了postevents中的所有更改。無需自己創建三角洲。

另一方面,Envers很容易集成和配置。使用@Audited註釋您的實體足以滿足「完整」版本支持。我相信你不能直接使用Spring Data來查詢修訂實體,因爲你總是可以編寫你的AuditReaderRepository bean並直接使用hibernate審計查詢接口。在這種情況下襬弄兩個版本之間的更改列表將留給您,這基本上意味着獲取修訂版本並確定它們之間的增量。在這種情況下,Envers的主要優勢在於用戶表示仍然是用戶類,而不僅僅是一個字符串(創建者fe)

它取決於您希望支持哪種級別的審計,我會用最小的所需實現。關於在www中選擇什麼樣的審計策略,有一些很好的博客。

+0

我的應用支持數據每天都會刷新,但另一部分需要知道實體某些字段中發生的所有更改。然後,我必須向他們展示,以便能夠使用我的實體並接收Employees的實例,而不是字符串。這就是爲什麼Envers對我來說真的很棒,但我在配置時遇到問題。 – 2013-05-01 12:41:27

+0

配置有什麼問題?我所要做的就是將envers jar添加到戰爭中,並在我想要審計的類上添加@audited註釋。我遇到的唯一的小問題是entityrelations沒有被審計的實體,但是我只是在關係定義上添加了另一個註釋來不審計這些(@auditmode?不確定atm)。 envers正在爲我工​​作。我使用最新的休眠4.2 – 2013-05-02 05:00:52

6

使用Spring數據Envers :)

「這個項目是Spring數據JPA項目,以允許訪問由Hibernate Envers管理實體版本的延伸。」

https://github.com/SpringSource/spring-data-envers

+0

請參閱Spring Data Envers路線圖https://github.com/spring-projects/spring-data-envers/issues/33 – 2015-06-04 14:50:56

+0

FYI Envers內置於Spring數據截至發行列車跳躍者https: //spring.io/blog/2016/02/12/spring-data-release-train-hopper-m1-released – 2016-03-10 06:38:04