使用Javers比较地图

时间:2017-02-02 16:02:43

标签: javers

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

我想发现鲍勃在下面将城市从伦敦改为巴黎:

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() {...}
}

2 个答案:

答案 0 :(得分:2)

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

对于顶级收藏集,有一种特殊的方法(javers.compareCollections()),但地图尚无。

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

答案 1 :(得分:0)

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

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