Hibernate - 多次删除+插入操作而不调用flush方法会导致重复数据
Hibernate - 多次删除+插入操作而不调用flush方法会导致重复数据
我有一个关系:
Parent { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent") private Listchildren = new ArrayList<>(); } Child { @ManyToOne private Parent parent; }
我想删除所有的子项并添加新的子项。这就是为什么我调用:
ListnewChildren = Arrays.asList(firstChild, secondChild); parent.getChildren().clear(); parent.getChildren().addAll(newChildren); parentRepository.save(parent);-我使用spring data
然而,我发现当我调用上面的代码两次时(我有更复杂的逻辑,但这是我能够复制我的问题的最简单的情况),不调用flush()
方法时,Hibernate会向数据库添加重复的条目(parent将有4个子项):
parent.getChildren().clear(); parent.getChildren().addAll(newChildren); parentRepository.save(parent); parent.getChildren().clear(); parent.getChildren().addAll(newChildren); parentRepository.save(parent);
将save
替换为saveAndFlush
修复了上面的代码,并导致parent只有2个子项。
为什么在删除和插入新的子项到父项之前需要调用flush方法?