2017-07-19 29 views
0

比較兩個相同大小的對象時,Javers比較1對1。但是,如果添加了新更改(如新行)到其中一個對象,則比較報告的更改不會發生更改。爲了比較類似的對象,是否有可能讓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時,他們實際上並沒有改變。

謝謝。

回答

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的功能請求。