如何使用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() {...}
}
答案 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);
此地图比较是否已实施或仍在开发中?