【发布时间】:2020-05-26 19:03:45
【问题描述】:
我有两个实体,Menu 和 MenuItem,如下面的源代码所示。我正在尝试从数据库中获取包含所有子实体的菜单,但 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>();
[...]
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 用于集合,但由于我需要集合的所有元素,因此在加载菜单时加载它们很有用。如果没有列表,菜单将无法使用。
【问题讨论】:
-
您可以添加“图片”以如何查看您的数据库吗?这对回答您的问题非常有帮助,因为在您的问题中,您在一个类中建立了 ManyToOne 关系。