是否可以反序列化 Javers Diff?

Is it possible to deserialise a Javers Diff?

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

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

这是我的用例:

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

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

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

我找到了正确的方法。我一直在为 serialization/deserialization 使用 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)