You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot使用ModelMapper更新实体时遭遇集合级联操作异常的问题求助

Spring Boot使用ModelMapper更新实体时遭遇集合级联操作异常的问题求助

嗨,各位大佬,我最近在开发一个Spring Boot服务,想用ModelMapper来处理DTO和实体之间的转换,创建团队的功能正常,但执行更新操作的时候碰到了一个异常,卡了好久找不到合适的解决办法,来求助大家!

问题场景

我定义了Team和Person的实体,还有对应的DTO,其中Team和Person是一对多的关系,并且配置了cascade = CascadeType.ALL, orphanRemoval = true来实现级联操作和孤儿删除。创建Team的时候一切正常,但调用更新接口时,抛出了如下异常:

A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: org.aero.cvr.TeamEntity.members

相关代码示例

DTO类

@Data
public class TeamDto {
    private String name;
    private List<PersonDto> members;
}

@Data
public class PersonDto {
    private String name;
}

实体类

@Data
@Entity
public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinColumn(name = "team_id")
    private List<Person> members = new ArrayList<>();
}

@Data
@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

仓库、配置与控制器

public interface TeamRepository extends ListCrudRepository<Team, Long> {}

@Configuration
public class ModelMapperConfig {
    @Bean
    ModelMapper getModelMapper() {
        return new ModelMapper();
    }
}

@RestController
@RequiredArgsConstructor
public class TeamController {
    private final TeamRepository teamRepository;
    private final ModelMapper mapper;

    @PostMapping("/team")
    public void create(@RequestBody TeamDto team) {
        Team teamEntity = mapper.map(team, Team.class);
        teamRepository.save(teamEntity);
    }

    @PutMapping("/team/{id}")
    public void update(@RequestBody TeamDto team, @PathVariable Long id) {
        Team teamEntity = teamRepository.findById(id).orElseThrow(() -> new ResponseStatusException(NOT_FOUND));
        mapper.map(team, teamEntity);
        teamRepository.save(teamEntity);
    }
}

我的困惑

创建操作没问题,但更新时就触发了这个集合相关的异常,我猜测是ModelMapper处理集合的方式和JPA的级联管理冲突了,但不确定具体怎么调整ModelMapper的配置,或者有没有其他更合适的处理方式来解决这个问题?麻烦各位前辈给点思路!

备注:内容来源于stack exchange,提问作者macavity42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:42:38