2012-03-14 44 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

出于性能方面的问题,我不知道该框架是如何工作的(在数据库冗余或没有),但你会避免对象克隆。