【问题标题】:How to track/record the versions of the entity changes如何跟踪/记录实体更改的版本
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多