2

如何Entity使用 JaVers 按 id、属性比较包含对象的两个地图?

我想检测鲍勃在以下情况下将城市从伦敦更改为巴黎:

public void compareMaps() {
    Javers javers = JaversBuilder.javers().build();
    Map<Integer, Person> a = new HashMap<>();
    Map<Integer, Person> b = new HashMap<>();
    a.put(Integer.valueOf(1), new Person(1, "Bob", "London"));
    b.put(Integer.valueOf(1), new Person(1, "Bob", "London"));
    Diff diff = javers.compare(a, b);
    assertThat(diff.getChanges()).hasSize(0);
    b.get(Integer.valueOf(1)).setCity("Paris");
    diff = javers.compare(a, b);
    assertThat(diff.getChanges()).hasSize(1);
}

static public class Person {
    @Id
    int id;
    String name;
    String city;
    @Override
    public boolean equals(Object obj) {...}
    @Override
    public int hashCode() {...}
}
4

2 回答 2

2

实际上,您无法比较顶级地图。作为一种解决方法,您可以将这些 Map 放在某个值对象中,这要归功于 JaVers 将能够确定键和值的类型。

对于顶级 Collections,有一个特殊的方法 ( javers.compareCollections()),但 Maps 还没有。

在 JaVers 的进一步版本中,可以实现以下方法 <K,V> Diff compareMaps(Map<K,V> oldVersion, Map<K,V> currentVersion, Class<K> keyClass, Class<V> valueClass);

于 2017-02-05T20:57:26.240 回答
0

在 JaVers 的进一步版本中,可以实现以下方法 Diff compareMaps(Map oldVersion, Map currentVersion, Class keyClass, Class valueClass);

此地图比较是否已实施或仍在开发中?

于 2020-05-11T11:14:01.693 回答