【发布时间】:2012-03-14 11:25:17
【问题描述】:
我们想在我们的 Java 项目(JSF/EJB/JSF)中实现“版本控制”功能。举个例子吧:
----- |一个 | ----- 1/\1 / \ */ \* ----- ----- |乙| | C | ----- -----上图显示了一个简单的对象图,其中包含 3 个对象,即 A、B 和 C。B 和 C“是”A 的“一部分”,对 A 和/或 B 和/或 C 的任何更改都需要创建一个新的A 的版本。
问题是,如何在Java端和数据库端实现它?
到目前为止,我们得到了 2 个解决方案,但尚未解决:
SolutionA:A 部分的非常大的变化将导致 A 的新的深度克隆,并且该克隆将作为新版本通过 JPA 持久化到数据库。优点:实现简单,缺点:java端和数据库都有很多冗余(考虑到对象图很大的情况)。
SolutionB:仅在数据库中创建 A 的更改部分。 优点:没有冗余,数据库性能可能更好。缺点:这破坏了对象图,我们必须手动维护对象之间的关系/引用。可能会将开发变成一场噩梦。
有什么想法吗?
【问题讨论】:
-
如果这是一个版本控制系统,你的模型不应该用Change、Version等来表达吗?
-
首先,如果索引正确,解决方案 A 将具有更好的数据库性能,因为它不必在创建对象时解析关系。其次,版本控制的目的是什么?比较差异?还是只是为了记录保存?
标签: java oop orm versioning