原因

hashCode和equals方法中会对多对多属性进行处理。而且多对多关系中都互相包含,并且都有实现hashCode和equals方法,这就出现了循环的情况,于是就导致栈溢出。

解决方法

使用 @JsonIgnore注解 或者使用@JsonManagedReference@JsonBackReference注解(使用这组注解可以序列化另一个关系的类)。具体详见代码

    @ManyToOne
    @MapsId("examId")
    @JoinColumn(name = "exam_id")
    @JsonBackReference
    private Exam exam;
}
@JsonManagedReference
    @OneToMany(mappedBy = "exam", targetEntity = ExamRating.class, 		     fetch = FetchType.EAGER) 
    private Set<ExamRating> examRatings;

当然我们也可使用

@ToString(exclude = {
   "xxx"})
@EqualsAndHashCode(exclude= {
   "xxx"})