JAP出現java.lang.StackOverflowError異常

JAP出現java.lang.StackOverflowError異常

最終原因是因爲toString相互調用的原因,導致出現了這種現象: o

@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "xxx1_table")
public class XXX1Entity extends BaseEntity {
    private static final long serialVersionUID = -44891563261597827L; 
    /**
     * product sku attribute list
     */
    @OneToMany(mappedBy = "xxx1Obj", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<XXX2Entity> xxx2List;
}

@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "xxx2_table")
public class XXX2Entity extends BaseEntity {
    private static final long serialVersionUID = -44891563261597827L; 
    /**
     * product sku attribute list
     */
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH}, optional = false)
    @JoinColumn(name = "xxx1_id", referencedColumnName = "xxx1_id")
    private XXX1Entity xxx1Obj;
} 

怎麼我們可以看到他們是循環引用,當我們調用XXX1Entity#toString()的時候其中會輸出xxx2List這個list的#toString方法,list#toString()方法又會調用XXX2Entity#toString()方法最終導致死循環,出現StackOverflowError異常。

解決方案:
去掉@Data改爲@Getter @Setter這樣就不會出現這種問題了,如果你需要toString方法就自己實現就好了,但是千萬不要出現這種方法的相互調用死循環就ok了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章