合并不会级联持久



假设我有一个父级,一个子项和子项的子项,我需要保存整个层次结构。

@Entity
@Data
class Parent{
@Id
@GeneratedValue
private Long id;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, orphanRemoval = true)
public Set<Child> childs = new HashSet<>();
}
@Entity
@Data
class Child{
@Id
@GeneratedValue
private Long id;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, orphanRemoval = true)
public Set<ChildOfChild> childsOfChild = new HashSet<>();
}
@Entity
@Data
class ChildOfChild{
@Id
@GeneratedValue
private Long id;
}

如果我创建层次结构并在父级上调用 persist,则 PERSIST 操作会按预期级联到子级。

Parent parent = new Parent();
Child child = new Child(); 
ChildOfChild childOfChild = new ChildOfChild();
child.getChildsOfChild().add(childOfChild);
parent.getChilds().add(child);

如果我检索现有父级,请更改其子项,然后调用合并。PERSIST 操作不会级联到其子级。

parent=findById(id);
Child child = new Child(); 
ChildOfChild childOfChild = new ChildOfChild();
child.getChildsOfChild().add(childOfChild);
parent.getChilds().add(child);

正常吗?在合并操作期间,我应该如何级联持久化?

使用通过 JPA 规范提供的合并操作不适用于我的嵌套子级情况。

然而,Hibernate特定的SaveOrUpdate方法完成了这项工作。如果有人知道通过JPA提供的任何其他方法,请告诉我。同时,这将是公认的答案。

最新更新