造成实体所有者实例不再引用“导致具有层叠=“ all-delete-orphan的集合”的ModelMapper”

时间:2019-06-12 11:10:03

标签: java hibernate modelmapper

我们正尝试将项目中使用的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的哪些更改可能导致此问题吗?

0 个答案:

没有答案