Мы пытаемся обновить версию ModelMapper, которую мы используем в нашем проекте, с 2.1.1 до 2.3.2 (по причинам миграции на Java 11).После обновления версии ModelMapper до 2.3.2 у нас возникают проблемы с отображением сущностей, содержащих коллекции других сущностей.
Мы обнаружили, что эта проблема начинает возникать с ModelMapper версии 2.2.0.
Вот некоторый упрощенный код, который представляет наш сценарий.
class A {
Long id;
String data;
List<B> bs;
}
class B {
Long id;
String data;
A a;
}
class ADto {
Long id;
String data;
List<BDto> bDto;
}
class BDto {
String data;
}
Чтобы обновить сущности A через AD, мы используем следующую функцию.
A updateA(ADto aDto) {
A aEntity = aRepository.getOne(aDto.getId());
aEntity.getBs().clear();
modelMapper.map(aDto, aEntity);
aEntity.getBs().stream().forEach(b -> b.setA(aEntity));
return aRepository.saveAndFlush(aEntity);
}
Мы используем SpringBoot,таким образом, репозиторий является просто пружинным JpaRepository.
Этот код работает нормально при использовании ModelMapper версии 2.1.1, но при обновлении до 2.2.0 или выше мы получаем ошибку гибернации A collection with cascade="all-delete-orphan was no longer referenced by the owning entity instance: A.bs;
Мы делаем aEntity.getBs().clear()
, потому что в версии 2.1.1 ModelMapper не может правильно отобразить списки.Похоже, что он корректно работает с версией 2.2.0, поэтому мы попытались удалить aEntity.getBs().clear();
и aEntity.getBs().stream().forEach(b -> b.setA(aEntity));
, но это не решило проблему.
Кто-нибудь испытывал такую же проблему или знает, какие изменения в ModelMapper могливызвать это?