Я создал CustomPropertyComparator, чтобы использовать его для сравнения объектов, которые были созданы jaxb.Так что в моем случае я не могу использовать аннотацию @ DiffIgnore , предлагаемую платформой.Также коллекции, созданные jaxb, основаны на java.util.List, а не на java.util.Collection.К сожалению, мне не удалось заставить javers использовать мой CustomPropertyComparator с List-Interface.
public class Person {
private String name;
private String ignoreThis;
}
public class Company {
private String id;
private Person owner;
private Collection<Person> clients;
private List<Person> partners;
}
Компаратор, который сравнивает только имя, но игнорирует поле «ignoreThis»
public class EntityComparator implements CustomPropertyComparator<Person, ValueChange> {
public ValueChange compare(Person left, Person right, GlobalId affectedId, Property property) {
if (left.getName().equals(right.getName()))
return null;
return new ValueChange(affectedId, "entity/name", left.getName(), right.getName());
}
}
Мои тестовые случаи выглядят так:
Этот тест работает, потому что он сравнивает коллекцию
@Test
public void equalEntityClientTest() {
Person e1 = new Person("james", "ignore this");
Company le1 = new Company("1", null, Arrays.asList(e1), null);
Person e2 = new Person("james", "");
Company le2 = new Company("1", null, Arrays.asList(e2), null);
Diff diff = javers.compare(le1, le2);
System.out.println(diff);
assertEquals(0, diff.getChanges().size());
}
Этот тест не пройден, потому что он не использует мой компаратор для сравнения сущности иdiff игнорируемого поля имеет значение true.
@Test
public void equalEntityPartnerTest() {
Person e1 = new Person("james", "ignore this");
Company le1 = new Company("1", e1, null, Arrays.asList(e1));
Person e2 = new Person("james", "");
Company le2 = new Company("1", e2, null, Arrays.asList(e2));
Diff diff = javers.compare(le1, le2);
System.out.println(diff);
assertEquals(0, diff.getChanges().size());
}
В справочнике javers они объясняют, если у вас есть собственный Collection-Interface, вам нужно реализовать свой собственный компаратор, что нормально, если вы используете коллекцию, не основанную нана java.util.Collection.Но на самом деле я ожидал бы, что java.util.List поддерживается библиотекой javers.Также я не смог выяснить, как я могу добавить / создать Компаратор для List-Interface.
Рабочий пример можно найти по адресу: https://github.com/baumgartner/javerstest