Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠-多次删除+;不调用flush方法的插入操作会导致重复_Java_Hibernate_Spring Data Jpa - Fatal编程技术网

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);