@OneToMany查詢陷入循環引用問題
問題報錯如下
主要信息為:
wrapping Result set representing update count of 4>
以及:
exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
原本配置:
報錯原因是兩個類都使用了急加載的方式,就會導致一直查找外鍵的實體類而陷入循環,從而報錯。
解決方案:按需改為LAZY即可
@OneToMany( fetch = FetchType.LAZY)
success result:
JPA@OneTOMany查詢在ruturn的時候出現錯誤
java.lang.IllegalStateException原因和解決方法
在controller返回數據到統一json轉換的時候,出現了json infinite recursion stackoverflowerror的錯誤,即json在將對象轉換為json格式的數據的時候,出現了無限遞歸調用的情況。
具體的情況如下
A類中,有個屬性:List<B> b, A與B的關系為 OneToMany;在B類中,有屬性A a,引用到A中的字段id,并作為外鍵。hibernate查詢結果正常,可以看到返回的A對象中,有b參數值,但在json轉換的時候就出現了無限遞歸的情況。
個人分析,應該是json在序列化A中的b屬性的時候,找到了B類,然后序列化B類,而B類中有a屬性,因此,為了序列化a屬性,json又得去序列化A類,如此遞歸反復,造成該問題。
同時值得注意的是必須重寫其中一個類toString方法,去除其中另一個類的內容,否則也會造成無限遞歸的產生。
解決
在B類中a的getter setter方法上加注解@JsonBackReference,只在setter方法上加@JsonBackReference也夠了。
如果是使用lombok注解,可以直接在B類的a字段上添加注解@JsonBackReference
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/H_Dsheng/article/details/110790079