1. 程式人生 > >Spring-data-JPA清空OneToMany關係中Many一方的資料

Spring-data-JPA清空OneToMany關係中Many一方的資料

/**父物件*/
class Parent { 
	@OneToMany(mappedBy = "parent")
	List<Child> children;
}
/**子物件*/
class Child{
	Parent parent;
}

在如上所列的OneToMany關係中,如果想要清空某個Parent物件的所有子物件,以下的程式碼會失敗:

Parent parent = parentRepository.findById(id);
parent.setChildren(Collectons.emptyList());
parentRepository.save(parent) //這裡會報錯A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance

原因是Collections.emptyList()得到的是一個不受管的List。正確的做法是:

parent.getChildren().clear(); //getChildren()返回了一個受管的List
parentRepository.save(parent);