如何在 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
。在其他情况下,我需要使用自定义序列化程序,我不会在其中加载子项。
我有一个带有 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
。在其他情况下,我需要使用自定义序列化程序,我不会在其中加载子项。