我有一个带有Pages的应用程序,每个应用程序都有子页面:
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;
...
}
我想在每个页面上显示一个链接 << Back to parent page
,并提供指向其所有子项的链接:
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>
这导致无限循环父 - 子 - 父 - ...
我试过@JsonIgnore,但后来我失去了我需要的信息(无论是父母还是孩子)。我还尝试使用@JsonManagedReference
和具有@JsonBackReference
的子页面列表来注释父级。然后我可以看到父母,但不是孩子。我的下一步是尝试编写自定义序列化程序。
所以我的问题是 - 有没有人知道如何才能获得parentPage
属性并且仍然能够看到孩子而不会进入无限循环的孩子 - 父母 - 孩子 - 父母......?
答案 0 :(得分:0)
我找到了解决方案。在其中一个关系中,我可以使用@JsonIgnore
。在其他情况下,我需要使用自定义序列化程序,我不会加载孩子。
答案 1 :(得分:0)
我有同样的问题。有一种方法可以为“ parentPage”和“ childPages”创建自定义吸气剂,从而避免无限循环。
使其起作用的唯一条件是,您只有2个关系级别,这意味着第一堆页面是母版页面,没有父页面,第二个页面是子页面,从第一层开始一堆。
当您需要访问子页面的父页面(this.parentPage)时,不需要其子页面。父页面的getter只是删除其子页面以避免无限循环。
当您需要访问任何子页面时,可以通过设置父页面来识别它-然后可以忽略其子页面并返回null。
ssldir = /etc/puppetlabs/puppet/ssl