我们正尝试将项目中使用的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;
}
为了通过ADto更新A实体,我们使用以下功能。
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,因此存储库只是一个普通的Spring 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的哪些更改可能导致此问题吗?