如何在 Hibernate 中打破无限 parent - children 循环

How to break infinite parent - children loop in Hibernate

我有一个带有 Pages 的应用程序,每个应用程序可能有 child 个页面:

Page.java

public class Page{
  ...
  @Nullable
  @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  private Page parentPage;

  @OneToMany(fetch = FetchType.EAGER, mappedBy = "parentPage")
  private List<Page> childPages;
  ...
}

我想在每个页面上显示一个 link << Back to parent page,并且它的所有 child 都有 link ]任:

view-page.html

<div ng-if="currentPage.parentPage">
  <a href="#/view-page?pageId={{currentPage.parentPage.id}}">Back to {{currentPage.parentPage.title}}</a>
</div>
...
<div ng-repeat="row in currentPage.childPages">
  <a href="#!/view-page?pageId={{row.id}}">{{row.title}}</a>
</div>

这会导致无限循环 parent - child - parent - ...

我尝试使用@JsonIgnore,但后来我丢失了我需要的信息(无论是 parent 还是 child)。我还尝试用 @JsonManagedReference 注释 parent,用 @JsonBackReference 注释 child 页面列表。然后我可以看到 parent,但看不到 children。我的下一步将是尝试编写自定义序列化程序。

所以我的问题是 - 有没有人知道如何获得 parentPage 属性 并且仍然能够看到 children 而不会陷入无限循环 child - parent - child - parent...?

我找到了解决办法。在其中一个关系中,我可以使用 @JsonIgnore。在其他情况下,我需要使用自定义序列化程序,我不会在其中加载子项。