0

在比较两个相同大小的对象时,Javers 会进行一对一的比较。但是,如果向其中一个对象添加新更改(例如新行),则比较会报告未更改的更改。是否可以让 Javers 忽略添加/删除只是为了比较类似的对象?

基本上指数不同步。

Row  Name  Age Phone(Cell/Work)
 1    Jo    20  123
 2    Sam   25  133
 3    Rick  30  152
 4    Rick  30  145

新名单

Row  Name  Age Phone(Cell/Work)
 1   Jo    20  123
 2   Sam   25  133
 3   Bill  30  170
 4   Rick  30  152
 5   Rick  30  145

因为添加了比尔,所以新的比较结果将显示第 4,5 行已更改,而实际上并没有更改。

谢谢。

4

1 回答 1

0

我猜您的“行”是表示 excel 表中行的对象,并且您已将它们映射为 ValueObjects 并将它们放入某个列表中。

由于 ValueObjects 没有自己的身份,因此即使对于人类来说,也不清楚实际的变化是什么。看看你的第 4 行:

Row  Name  Age Phone(Cell/Work)
before:
4   Rick  30  145
after:
4   Rick  30  152

您是否将第 4 行的电话从 145 更改为 152?或者,也许您在第 4 行插入了一个新数据?我们怎么知道?我们不能。默认情况下,JaVers 选择最简单的答案,因此在索引 4 处报告值变化。

如果您不关心索引,则可以将列表比较算法从 更改SimpleLevenshtein distance。请参阅https://javers.org/documentation/diff-configuration/#list-algorithms

SIMPLE 算法为移位的元素生成更改(以防在列表中间插入或删除元素)。相反,Levenshtein 算法即使在元素移动的情况下也会计算出简短而清晰的变化列表。它不关心移位元素的索引更改。

但是,我不确定是否为 ValueObjects 实现了 Levenshtein,如果还没有实现,那是对 javers-core 的功能请求。

于 2017-07-19T18:54:35.170 回答