Java Javers按顺序比较列表
我有两个类似这样的java类:Java Javers按顺序比较列表,java,list,java-8,compare,javers,Java,List,Java 8,Compare,Javers,我有两个类似这样的java类: public class FooA { private List<FooB> fooB; } public class FooB { private Integer id; private String name; private double num; } 它给了我这个区别: Diff: * new object: com.FooA/#fooB/1d32d18fcb3ba2f7f7cb41af6cd96b32 * object r
public class FooA {
private List<FooB> fooB;
}
public class FooB {
private Integer id;
private String name;
private double num;
}
它给了我这个区别:
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,就像我在很多帖子中读到的那样。现在我的食物看起来像这样:
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'
我做错了什么?使用
Javers
版本5.2.4
:
public class FooA {
private List<FooB> fooB;
public FooA(List<FooB> fooB) {
this.fooB = fooB;
}
}
public class FooB {
private Integer id;
private String name;
private double num;
public FooB(Integer id, String name, double num) {
this.id = id;
this.name = name;
this.num = num;
}
}
void test() {
FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
FooA new1 = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
.build();
System.out.println(
javers.compare(old, new1)
);
}
这几乎和你想要的一样
FooA/fooB/0.name
->FooA具有数组fooB,并且第一个(索引0)name属性已更改,但您更改的是对象,而不是集合,那么您为什么期望集合更改?
public class FooA {
private List<FooB> fooB;
public FooA(List<FooB> fooB) {
this.fooB = fooB;
}
}
public class FooB {
private Integer id;
private String name;
private double num;
public FooB(Integer id, String name, double num) {
this.id = id;
this.name = name;
this.num = num;
}
}
void test() {
FooA old = new FooA(Arrays.asList(new FooB(1, "old", 1.0)));
FooA new1 = new FooA(Arrays.asList(new FooB(1, "new", 1.0)));
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
.build();
System.out.println(
javers.compare(old, new1)
);
}
Diff:
* changes on pl.javers.JaversTest$FooA/ :
- 'fooB/0.name' changed from 'old' to 'new'