ModelMapper, вызывающий «Коллекцию с cascade =« all-delete-orphan »больше не ссылается на экземпляр объекта-владельца» - PullRequest
0 голосов
/ 12 июня 2019

Мы пытаемся обновить версию 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 могливызвать это?

...