gpt4 book ai didi

java - Spring Data JPA - 在显式删除子项后加载父项返回已删除子项的子项集合

转载 作者:行者123 更新时间:2023-11-30 11:32:30 25 4
gpt4 key购买 nike

我有父->子双向关系如下...

class Parent{

@OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
Collection<Child> children;
}

class Child{
@ManyToOne
@JoinColumn(name="PARENT_ID")
private Parent parent;
}

当我明确删除子项,然后加载其父项(包括所有子项)时,我在父项的子项集合中得到先前删除的子项...JPA 提供程序是 Hibernate...

Child child= childRepo.findOne(CHILD_ID);

childRepo.delete(child);
childRepo.flush();

// next, returns collection without deleted child
Collection<Child> children= childRepo.findAll();

Parent parent = parentRepo.findById(PARENT_ID);

/// next, returns collection including deleted child
Collection<Child> parentChildren = parent.getChildren();

我不明白这是什么问题?每个 find* 方法都执行 select(在列表中,这些 SELECT 记录在控制台中),但它们返回不同的结果...

最佳答案

您的 ManyToOne 是 EAGER(默认情况下)。您的 OneToMany 也是 EAGER(您已明确标记为如此)。因此,当您在第一行代码中获取一个子项时,JPA 还会加载其父项以及该父项的所有子项。

然后删除子项,但不会将其从父项的子项中删除。由于父项的子项集合已经加载,因此删除的子项仍在集合中。

关于java - Spring Data JPA - 在显式删除子项后加载父项返回已删除子项的子项集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com