這是我的使用案例如何檢索經審計的關係修訂版?
我有兩個實體:Personn和Email(@OneToMany關係)。他們都接受審計。
首先我創建一個新的Personn,帶有一個電子郵件(=>他們都有一個修訂版本1),然後修改Email(=>電子郵件有一個修訂版本2,但是Personn只有修訂版本1)
在Web應用程序中,最終用戶只有一個視圖來顯示Personn的屬性以及他的電子郵件屬性。在這個視圖中,我想顯示此Personn的所有現有修訂。但是當我查詢審計系統時,由於Personn沒有被修改,所以它沒有向我顯示修訂版本2。
我明白技術問題,但是從最終用戶的角度來看,他想看到一個修訂版本2,因爲他修改了這個人的電子郵件!他不知道(也不必知道)我們決定將這些信息分成兩個Java對象。當然,這個問題不僅僅是Personn-Email關係(我在Personn和其他對象之間有很多關係,它們在同一個視圖中顯示 - 地址,作業,網站,卡片等等)
我想到了兩種解決方案:
1-查詢所有關係以確定修訂版是否存在(但我想它會生成一個大請求或多個請求 - 我有很多關係)。將「hibernate.listeners.envers.autoRegister」設置爲false,編寫我自己的EnversIntegrator和事件實現。在事件實現中(它覆蓋默認的Envers實現),當電子郵件的屬性被修改時,我將爲Personn創建一個ModWorkUnit(它當然不會被硬編碼:在personn字段上使用@AuditedPropagation的自定義註釋)。 這個解決方案的缺陷是爲Personn創建了很多行,即使它沒有被修改。
您對這些解決方案有何看法?你知道解決這種用例的更好方法嗎?
感謝您的建議。
這可以幫助你: http://stackoverflow.com/questions/10121103/hibernate-envers-retrieving-the-right-revisions-of-an-entity-with-a-collection – user639466
謝謝,我看到了這個問題和@adamw的回答:「當前無法獲得實體**或相關實體更改的修訂列表**」。正是這個問題:如何實現這個功能? –
相關http://stackoverflow.com/questions/10697945/hibernate-envers-track-revisions-in-the-owning-side-of-a-onetomany-relation – Jean