我正在尝试为现有的遗留系统实现一个简单的diff系统。我正在使用Javers计算多个潜在对象状态之间的差异,并将它们保存在序列化版本中。我不想对我的对象进行更改,只是跟踪我的差异。
在给定先前序列化的Diff?
的情况下,有什么方法可以重新创建Diff对象这是我的用例:
我有一个基本实体我不想要改变。系统接收同一实体的新版本,我想知道它们与我的基本实体有何不同。我发现使用Javers Diff可以显示差异并且可以显示它们,显然可以通过序列化差异来保留它们,但不能通过序列化差异从DB恢复它们。
我认为实现相同的一种方法是保留整个更改的替代实体,然后在运行时计算Diff,但是当只有少数字段已更改时,似乎没有必要保留整个新实体。由于使用了唯一的密钥,保留我的实体的替代版本也会混乱我现有的系统。
答案 0 :(得分:3)
我找到了正确的方法。我一直在使用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)
答案 1 :(得分:1)
目前,我们正在研究名为 shadows 的功能。 https://github.com/javers/javers/issues/133。因此,您可以从JaversRepository中保留的快照中恢复原始域对象。但是不可能从差异中恢复原始对象,因为差异仅捕获两个状态之间的变化。