2016-07-12 61 views
0

我必須從舊應用程序導入歷史數據到新的應用程序。Java Envers導入

新應用程序正在使用Spring,Envers用於數據歷史記錄。

使用Spring批處理,使用與最終應用程序相同的存儲庫,使用相同的數據配置來遷移數據。

將修改(舊歷史)添加到審計實體的建議方式是什麼?

感謝。

+0

舊應用程序是否使用Envers或其他審覈機制? – Naros

+0

舊應用程序沒有自動審覈。對於「審計」實體,有一個「 _histo」表,其中包含舊值,更改日期,用戶,實體標識。 最簡單的方法是從源表(實體及其組織表)到目標表(newentity,其「aud」表和「revision」表)進行原始導入。 但我不知道Envers的副作用。 – Dede

+0

你打算使用'DefaultAuditStrategy'或'ValidityAuditStrategy'嗎? – Naros

回答

0

我要給出這個答案的前言,這是基於使用DefaultAuditStrategy。使用任何其他策略都需要完全不同的方法。

看來你想存儲每個修訂版本的用戶信息。要用Envers來做到這一點,你需要一個自定義的REVINFO表。你可以通過提供一個自定義@Entity來做到這一點,也可以用@RevisionEntity註釋,Envers會自動選擇它。爲了讓Envers成爲當前用戶,您還需要提供一個RevisionListener實現。你可以看到關於如何創建這種實現的文檔。

然後你可以選擇使用通過設置hibernate.hbm2ddl_auto配置屬性之一來創建數據庫模式激活休眠的工具項目或休眠模式的工具。一旦你有了這個模式,你可以自由地將它從你的開發環境轉移到其他環境中。

爲了填充信息,您需要爲每個更改生成修訂號。您將在REVINFO表中存儲修訂號,時間戳和創建修訂版的用戶。此外,在該修訂期間修改的所有實體都將存儲在其各自的審計表中,使用實體的主鍵和REVINFO表中的值作爲審計表的主鍵。

現在,你提到你的舊錶存儲old value

Envers實際上記錄當前狀態,因爲它涉及修訂而不是之前的狀態。這意味着您可能需要按摩您的傳入數據以確定當前的而不是舊的狀態信息。

現在,如果您打算使用Envers的各種其他配置選項,如withModifiedFlags,請告訴我,我可以根據需要更新這些答案。

希望這會讓你開始。