解决JPA级联查询出现的死循环问题
一、问题
当实体使用一对一/一对多/多对多双向关联时,出现如下两种情况时,会出现死循环:
1.实体类的toString()方法中包含对级联对象的输出,代码中调用了实体类的toString()方法。
2.接口查询时,对实体对象进行序列化。
二、原因
以一对多举例,用户类(User)为一,爱好类(Hobby)为多,User和Hobby为双向关联,当使用JPA查询User,会自动查询Hobby,同理当查询Hobby时,会自动查询User。当出现上述问题中的两种情况时,会导致toString()或序列化的实体对象一直相互调用,进入死循环。
三、解决方法
1.情况一
重写toString()方法,将级联对象数据清空。
2.情况二
对实体类中的级联对象加入@JsonIgnoreProperties注解,序列化时就会忽略对级联对象的序列化,从而中断死循环。