Java 休眠-多次删除+;不调用flush方法的插入操作会导致重复
我有一段关系:Java 休眠-多次删除+;不调用flush方法的插入操作会导致重复,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我有一段关系: Parent { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent") private List<Child> children= new ArrayList<>(); } Child { @ManyToOne private Parent parent; } 将save替换为saveAndFlush修复了上述代码
Parent {
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent")
private List<Child> children= new ArrayList<>();
}
Child {
@ManyToOne
private Parent parent;
}
将save
替换为saveAndFlush
修复了上述代码,并导致父级只有2个子级
为什么在删除新子项并将其插入父项之前需要调用flush方法?来自crudepository\save
:
S保存(S实体)
保存给定的实体将返回的实例用于进一步的操作,因为保存操作可能会完全更改实体实例
因此,我相信,当您替换为以下人员时,您的问题将得到解决:
parent = parentRepository.save(parent);
在代码中,您继续对未连接到上下文的实体执行操作,从而导致重复。这可能会给您一个提示:不,它无法解决此问题。
parent.getChildren().clear();
parent.getChildren().addAll(newChildren);
parentRepository.save(parent);
parent.getChildren().clear();
parent.getChildren().addAll(newChildren);
parentRepository.save(parent);
parent = parentRepository.save(parent);