2017-02-02 7 views
1

Entityオブジェクトを含む2つのマップを、JaVersを使用するID、プロパティでどのように比較できますか?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

実は、あなたはトップレベルの地図を比較することはできません。この問題を回避するには、JaVersがキーと値のタイプを判別できるように、これらのマップをいくつかのバリューオブジェクトに入れることができます。

トップレベルのコレクションの場合、特別な方法(javers.compareCollections())がありますが、まだマップには何もありません。 JaVersの更なるバージョンで

、folowing方法は <K,V> Diff compareMaps(Map<K,V> oldVersion, Map<K,V> currentVersion, Class<K> keyClass, Class<V> valueClass);

を実現することができます
関連する問題