我正在使用spring data jpa来构建我的项目。有一个用户实体和一个Biz实体。

@ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private UserInformation belongUser;//所属用户


上面的代码是Biz类的一部分。

@OneToMany(cascade = CascadeType.ALL,mappedBy = "belongUser")
private Set<BizInformation> bizs = new HashSet<BizInformation>();


这是User类的一部分

问题是,当我通过RESTful API获取UserInfomation时,它返回一个BizInfo,然后在BizInfo内部它返回了UserInfomation,最后导致了StackOverFlow异常。

我该如何解决?谢谢。

最佳答案

此问题是由双向关系引起的。您可以使用
@JsonManagedReference和@JsonBackReference


@JsonManagedReference是参考的前一部分–
正常序列化。
@JsonBackReference是参考的后半部分–将被省略
从序列化。


您可以在User类中添加@JsonManagedReference

@OneToMany(cascade = CascadeType.ALL,mappedBy = "belongUser")
@JsonManagedReference
private Set<BizInformation> bizs = new HashSet<BizInformation>();


和@JsonBackReference的Biz类将省略UserInformation序列化

@ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
@JsonBackReference
private UserInformation belongUser;//所属用户


您还可以对要忽略序列化的类使用@JsonIgnore

详细信息:jackson-bidirectional-relationships-and-infinite-recursion

08-25 19:54