2012-03-14 77 views
1

我們希望在我們的Java項目(JSF/EJB/JSF)實行「版本」功能。舉個例子:如何跟蹤/記錄的實體的版本變化

 
     ----- 
     | A | 
     ----- 
     1/\1 
     /\ 
     */ \* 
    ----- ----- 
    | B | | C | 
    ----- -----  

上圖顯示了一個簡單對象的圖形化用3個對象即,A,B和C B和C「是部分」 A的,在A和/或任何改變B和/或C需要創建A的新版本

的問題是,如何實現它,無論是在Java端和數據庫端?

我們得到了2解決方案到目前爲止,並沒有解決尚未:

SolutionA:關於A的部分非常的變化會引起A的新的深克隆,這個克隆將通過JPA進行持久到數據庫一個新版本。優點:實現簡單,缺點:在Java方面和數據庫方面都有很多冗餘(考慮對象圖很大的情況)。

SolutionB:只能創建的變更部分在數據庫中。優點:無冗餘,數據庫性能可能會更好。缺點:這打破了對象圖,我們必須手動維護對象之間的關係/引用。可能會推動發展成爲一場噩夢。

有什麼想法?

+0

如果這是一個版本的系統,應你的模型不能在更改,版本等來表達? – 2012-05-28 13:02:03

+0

首先,考慮到正確的索引,解決方案A將具有更好的數據庫性能,因爲它不必在創建對象時解析關係。其次,版本控制的目的是什麼?比較差異?或只是爲了記錄保存? – Chao 2012-06-04 15:24:08

回答

0

一個好的框架在JAVA這個存在,我們來看一看:Envers

出於性能方面的問題,我不知道該框架是如何工作的(在數據庫冗餘或沒有),但你會避免對象克隆。