我已经阅读了很多主题,并进行了数百次实验,但到目前为止还没有成功。我有以下课程:
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;
}
我所做的是尝试将children
列表替换为PATCH请求中提供的列表:
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
部分... 删除父级!你能解释为什么它会这样做,我能在这做什么?
答案 0 :(得分:2)
找到解决方案。
我应该有orphanRemoval = true:
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval=true)
现在由于@ManyToOne中的其他级联而删除了父级。我将其更改为以下内容:
@ManyToOne(cascade = {CascadeType.MERGE})
现在可行。