gpt4 book ai didi

java - Hibernate 不包括与另一个实体列表中的实体类型相同的子实体

转载 作者:行者123 更新时间:2023-12-01 14:27:13 25 4
gpt4 key购买 nike

我有两个实体,MenuMenuItem,如下面的源代码所示。我试图从数据库中获取包含所有子实体的菜单,但 Hibernate 还在 Menu 实体的 nodes 列表中插入 MenuItem 的子实体。

菜单.java

[...]

@OneToMany(fetch = FetchType.EAGER, mappedBy = "menu", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("order ASC")
private List<MenuItem> nodes = new ArrayList<MenuItem>();
[...]

菜单项.java

[...]

@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "parentId")
private MenuItem parentItem;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parentItem", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MenuItem> children = new ArrayList<MenuItem>();

@ManyToOne(optional = false)
@JoinColumn(name = "menuId")
private Menu menu;
[...]

提示:我知道您不应该将 FetchType.EAGER 用于集合,但由于我需要集合的所有元素,因此在加载菜单时加载它们很有用。没有列表将无法使用菜单。

最佳答案

只有预期是 Menu 的直接后代的 MenuItem 才应该设置 menu 字段,否则所有的 MenuItem 都将被提取到 nodes 集合,因为 mappedBy = "menu"

顺便说一句,就您对 EAGER 提取类型的用例而言似乎是合理的,您通常不应使用 EAGER 提取,而不仅仅是在集合上。 This is a good read about the topic .

关于java - Hibernate 不包括与另一个实体列表中的实体类型相同的子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62029483/

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