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了。