0
我讀了很多的主題,並做了數百個實驗,但迄今尚未成功。我有以下類:Spring,JPA - 雙向@OneToMany:用另一個替換子列表
class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL/*, orphanRemoval=true*/)
private List<Child> children = new ArrayList<>();
class Child {
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "parentId", nullable = false)
@JsonIgnore
Parent parent;
}
我所做的就是儘量在PATCH請求中提供的一個替換children
列表:
Hibernate.initialize(fromDb.getChildren());
entityManager.detach(fromDb); // detach from JPA. I need this
List<Child> newChildren = fromClient.getChildren();
fromDb.getChildren().clear(); // get rid of all old elements
for (Child child : newChildren) { // add the new ones
child.setParent(fromDb);
fromDb.getChildren().add(child);
}
ParentRepository.save(merged);
行爲是以下幾點:
- 當我運行它因爲它是,它增加了新的,但離開舊的 !所以我越來越多的多餘的孩子(對不起..)
- 當我 取消註釋
orphanRemoval=true
部分... 父母被刪除!
你能解釋爲什麼它的行爲如此嗎?我能在這裏做什麼?
因爲這就是你配置它做的事情......你刪除了'orphanRemoval = true'。問題在於你在循環中將所有東西級聯起來。從子對象的父字段中刪除級聯。 –
謝謝,看起來像我在同一時間自己找到同樣的問題:) – kiedysktos