我正在使用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