当比较两个相同大小的对象时,Javers比较1比1。但是,如果向其中一个对象添加了新更改(例如新行),则比较报告的更改不会更改。为了比较相似的对象,是否有可能让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行在实际上没有改变。
感谢。
答案 0 :(得分: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处的值更改。
如果您不关心索引,可以将列表比较算法从Simple
更改为Levenshtein distance
。见https://javers.org/documentation/diff-configuration/#list-algorithms
SIMPLE算法为移位的元素生成更改(如果在列表中间插入或删除元素)。相反,即使在元素移位的情况下,Levenshtein算法也会计算短而清晰的变化列表。它并不关心转移元素的索引更改。
但是,我不确定Levenshtein是否为ValueObjects实现,如果尚未实现,它是对javers-core的功能请求。