如何跟踪/记录实体更改的版本

时间:2012-03-14 11:25:17

标签: java oop orm versioning

我们希望在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 :仅在数据库中创建A的已更改部分。 优点:没有冗余,DB性能可能更好。缺点:这打破了对象图,我们必须手动维护对象之间的关系/引用。可能会把发展推向噩梦。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在JAVA中存在一个很好的框架,看看:Envers

对于性能问题,我不确定框架是如何工作的(冗余或数据库中没有),但是你将避免对象克隆。