У меня проблемы со сравнением списков в списках. Свойства моих внутренних списков не сравниваются, как я ожидал. Вместо этого объекты с одинаковым идентификатором перечислены как удаленные и добавленные.
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(AS_SET)
.registerEntity(Rent.class)
.registerValue(Book.class)
.build();
List<Book> bookListOld = new ArrayList<>(Arrays.asList(
new Book("book1", "like new", "Chronicles of..."),
new Book("book2", "like new", "Data vs. Goliath")
));
List<Book> bookListNew = new ArrayList<>(Arrays.asList(
new Book("book1", "broken", "Chronicles of...")
));
List<Rent> lstRentOld = new ArrayList<>(Arrays.asList(
new Rent("Smith", bookListOld)
));
List<Rent> lstRentNew = new ArrayList<>(Arrays.asList(
new Rent("Smith", bookListNew)
));
Diff difference = javers.compareCollections(lstRentOld, lstRentNew, Rent.class);
Объекты:
@AllArgsConstructor @Data @ToString
@TypeName("Rent")
public class Rent {
@Id
private String collectionIdentifier; // Person identifier which rented a list of books
private List<Book> books;
}
@AllArgsConstructor @Data @ToString
@TypeName("Book")
public class Book {
@Id
private String identifier;
private String condition;
private String title;
}
Git пример репо выпуска: Git
Результат этой настройки:
Diff:
* changes on compare.model.Rent/Smith :
- 'books' collection changes :
. 'Book(identifier=book2, condition=like new, title=David vs. Goliath)' removed
. 'Book(identifier=book1, condition=like new, title=Chronicles of...)' removed //shoulde in change
. 'Book(identifier=book1, condition=broken, title=Chronicles of...)' added //shoulde in change
Я не могу разобрать мою ошибку. Результат правильно содержит удаленный book2, но изменение свойства book1.condition не распознается. Несмотря на то, что идентификаторы eqal.
Я ожидал бы что-то вроде этого:
Diff:
* changes on compare.model.Rent/Smith :
- 'books' collection changes :
. 'Book(identifier=book2, condition=like new, title=David vs. Goliath)' removed
* changes on Book/book1 :
- 'condition' value changed from 'like new' to 'broken'
Если я удалю registerEntity / -Value в конструкторе объектов javers. Изменение значения правильно определено, но у меня нет возможности связать эту информацию с Объектом Аренды «Смит». Ну, в этом простом примере я могу, но нет, если в списках больше записей.
Итак, вопросы:
Почему не распознается разница book1? Возможно ли это вообще?
Как я могу убедиться, что могу связать изменение с объектом Rent с идентификатором «Smith»?