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
相关产品推荐
相关产品推荐

