@OneToMany查詢陷入循環(huán)引用的解決方案
@OneToMany查詢陷入循環(huán)引用問題
問題報錯如下


主要信息為:
wrapping Result set representing update count of 4>
以及:
exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
原本配置:

報錯原因是兩個類都使用了急加載的方式,就會導致一直查找外鍵的實體類而陷入循環(huán),從而報錯。
解決方案:按需改為LAZY即可
@OneToMany( fetch = FetchType.LAZY)
success result:

JPA@OneTOMany查詢在ruturn的時候出現(xiàn)錯誤
java.lang.IllegalStateException原因和解決方法
在controller返回數(shù)據(jù)到統(tǒng)一json轉換的時候,出現(xiàn)了json infinite recursion stackoverflowerror的錯誤,即json在將對象轉換為json格式的數(shù)據(jù)的時候,出現(xiàn)了無限遞歸調(diào)用的情況。
具體的情況如下
A類中,有個屬性:List<B> b, A與B的關系為 OneToMany;在B類中,有屬性A a,引用到A中的字段id,并作為外鍵。hibernate查詢結果正常,可以看到返回的A對象中,有b參數(shù)值,但在json轉換的時候就出現(xiàn)了無限遞歸的情況。
個人分析,應該是json在序列化A中的b屬性的時候,找到了B類,然后序列化B類,而B類中有a屬性,因此,為了序列化a屬性,json又得去序列化A類,如此遞歸反復,造成該問題。
同時值得注意的是必須重寫其中一個類toString方法,去除其中另一個類的內(nèi)容,否則也會造成無限遞歸的產(chǎn)生。
解決
在B類中a的getter setter方法上加注解@JsonBackReference,只在setter方法上加@JsonBackReference也夠了。
如果是使用lombok注解,可以直接在B類的a字段上添加注解@JsonBackReference
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java使用ArrayList實現(xiàn)斗地主(無序版)
這篇文章主要為大家詳細介紹了java使用ArrayList實現(xiàn)斗地主,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03

