3

我正在尝试为现有的遗留系统实现一个简单的差异系统。我正在使用 Javers计算多个潜在对象状态之间的差异,并将它们保存在序列化版本中。我不想在我的对象上提交更改,只需跟踪我的差异。

给定先前序列化的 Diff,有什么方法可以重新创建 Diff 对象?

这是我的用例:

我有一个不想更改的基本实体。系统接收同一实体的新版本,我想知道它们与我的基本实体有何不同。我使用 Javers Diff 发现了差异并可以显示它们,并且显然通过序列化差异来持久化它们,但不能通过序列化差异从数据库中恢复它们。

我想实现相同的一种方法是保留整个更改的替代实体,然后在运行时计算 Diff,但是当只有少数字段发生更改时,似乎没有必要保留整个新实体。由于唯一键,坚持我的实体的替代版本也会弄乱我现有的系统。

4

2 回答 2

5

我找到了正确的方法来做到这一点。我一直在使用 Jackson ObjectMapper 进行序列化/反序列化,这给我带来了问题。

为了正确序列化和反序列化,我必须使用 Javers 的内部 JsonConverter:

Diff diff = javers.compare(myObject1, myObject2)

//Tears and pain :(
String omDiff = objectMapper.writeValueAsString(diff)
Diff fromOm = objectMapper.readValue(omDiff, Diff.class)

//yay :)
String jcDiff = jsonConverter.toJson(diff)
Diff fromJc = jsonConverter.fromJson(jcDiff, Diff.class)
于 2017-03-22T10:55:35.050 回答
1

目前,我们正在开发名为shadows的功能。 https://github.com/javers/javers/issues/133。因此,您将能够从保存在 JaversRepository 中的快照中恢复您的原始域对象。但是从差异中恢复原始对象是不可能的,因为差异只捕获两个状态之间的变化。

于 2017-03-09T21:32:37.163 回答