案例:
实体声明:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Foo> foos = Lists.newArrayList();
这个区块
user.getFoos().clear();
// instantiate `foos`, eg: final List<Foo> foos = myService.createFoos(bla, bla);
user.setFoos(foos);
产生此错误:
org.springframework.orm.jpa.JpaSystemException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: com.github.lalou.jonathan.blabla.User.foos
修复: 不要使用
setFoos()
;相反,清除后,使用addAll()
。
换句话说,替换:
user.getFoos().clear();
user.setFoos(foos);
与
user.getFoos().clear();
user.getFoos().addAll(foos);