JPA项目,查询失败,Could not write JSON: failed to lazily initialize a collection of role
.w.s.m.s.DefaultHandlerExceptionResolver:Resolved exception caused by handler excution:
org.springframework.http.converter.HttpMessageNotWritableException:Could not write JSON: failed to lazily initialize a collection of role
网上有说是懒加载的问题,但是我没能从这个思路解决问题(因为还会无限循环,可能是我没处理好.但是如果想要查询到引用属性的第几级,可能就需要好好研究一下懒加载了).
问题发生的原因是:
返回的数据是实体类,这个实体类里面有很多关联关系,会无限查询(不知道这种说法是否完全正确,望指教)
解决方法:
(1)在实体类中一对多的引用属性上加上注解@JsonIgnore,表示查询的时候不查询这个属性
比如Teacher类(班主任)中关联了学生集合,是一对多的关系
import com.fasterxml.jackson.annotation.JsonIgnore;
(2)在实体类中多对一的引用属性上加上注解@JsonIgnoreProperties,表示查询的时候不查询这个引用属性中的哪些属性(需要手动定义不需要查询哪些属性)
反过来在Student类中也关联了一个班主任Teacher,是多对一的关系
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
(value中是Teacher对象中的属性名,表示查询的时候不查询teacher类中的哪些属性,这里写的都是引用属性名.
比如students,表示不查询teacher中的引用属性students,但是查询teacher的id等其他普通属性)
(如果teacher中引用属性只有一个,那么写value=" "格式就可以,如果是多个引用属性,可以使用value={" "," "})
更多推荐
所有评论(0)