2017-02-02 9 views
1

Как сравнить две карты, содержащие Entity объектов по id, свойства с помощью JaVers?Сравнение карт с использованием Javers

Я хотел бы, чтобы обнаружить, что Боб меняет город из Лондона в Париж в следующем:

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

ответ

1

На самом деле, вы не можете сравнивать верхние карты уровня. В качестве обходного пути вы можете поместить эти Карты в некоторый объект Value, благодаря чему JaVers сможет определять типы ключей и значений.

Для коллекций высшего уровня существует специальный метод (javers.compareCollections()), но пока ничего не найдено.

В дальнейшей версии JaVers, метод folowing может быть реализован <K,V> Diff compareMaps(Map<K,V> oldVersion, Map<K,V> currentVersion, Class<K> keyClass, Class<V> valueClass);

 Смежные вопросы

  • Нет связанных вопросов^_^