【发布时间】:2019-03-06 20:11:18
【问题描述】:
我有两个这样的 java 类:
public class FooA {
private List<FooB> fooB;
}
public class FooB {
private Integer id;
private String name;
private double num;
}
我想比较 FooA,它告诉我列表对象中的哪些字段发生了变化。但是当我这样做时:
FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
FooA new = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
.build();
javers.compare(old, new);
它给了我这个差异:
Diff:
* new object: com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32
* object removed: com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620
* changes on com.FooA/ :
- 'fooB' collection changes :
. 'com.FooA/#fooB/223ef3c3249fe2898ac3354f9bf42620' removed
. 'com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32' added
我什至尝试在 FooB 上添加一个 Id,就像我在很多帖子中看到的那样。所以现在我的 foob 看起来像这样:
public class FooB {
@Id
private Integer id;
private String name;
private double num;
}
但现在当我比较时,我得到了这个:
Diff:
* changes on com.FooB/1 :
- 'name' changed from 'old' to 'new'
它注册为值更改而不是集合更改。我希望差异看起来像这样:
Diff:
* changes on com.FooA/#fooB/1 :
- 'fooB' collection changes :
. 'name' changed from 'old' to 'new'
我做错了什么?
【问题讨论】:
-
但是你已经改变了一个对象,而不是一个集合,那么为什么你期望一个集合改变呢?
标签: java list java-8 compare javers