Javers возвращает неполный diff, когда поле сущности объявлено с использованием абстрактного типа.
Я использую Javers 2.9.2, но также пробовал 5.4.0. Моя проблема появилась в обеих версиях.
У меня есть модель, подобная следующей:
// An entity.
class Entity {
AbstractType field;
}
abstract class AbstractType {}
// A value object.
class ConcreteA extends AbstractType {
AnotherEntity entityA;
}
// A value object.
class ConcreteB extends AbstractType {
AnotherEntity entityB;
// Other fields are omitted for simplicity.
}
// The class registered as an entity.
class AnotherEntity {
String uuid;
String name;
}
Я регистрирую сущности и объекты стоимости выше.
Сравнение следующих объектов:
AnotherEntity anotherEntity = new AnotherEntity("name");
Entity originalEntity = new Entity();
originalEntity.field = new ConcreteA(anotherEntity);
Entity updatedEntity = new Entity();
updatedEntity.field = new ConcreteB(anotherEntity);
javers.compare(originalEntity, updatedEntity);
Я ожидаю, что различие говорит:
- Поле
entityA
удалено.
- Добавлено поле
entityB
.
Но вместо этого diff говорит, что было удалено только поле entityA
(ReferenceChange
). Итак, в diff отсутствует одно поле.
Как я могу получить полную разницу для моего дела?