@OneToMany查詢陷入循環(huán)引用的解決方案
@OneToMany查詢陷入循環(huán)引用問題
問題報(bào)錯(cuò)如下
主要信息為:
wrapping Result set representing update count of 4>
以及:
exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
原本配置:
報(bào)錯(cuò)原因是兩個(gè)類都使用了急加載的方式,就會(huì)導(dǎo)致一直查找外鍵的實(shí)體類而陷入循環(huán),從而報(bào)錯(cuò)。
解決方案:按需改為L(zhǎng)AZY即可
@OneToMany( fetch = FetchType.LAZY)
success result:
JPA@OneTOMany查詢?cè)趓uturn的時(shí)候出現(xiàn)錯(cuò)誤
java.lang.IllegalStateException原因和解決方法
在controller返回?cái)?shù)據(jù)到統(tǒng)一json轉(zhuǎn)換的時(shí)候,出現(xiàn)了json infinite recursion stackoverflowerror的錯(cuò)誤,即json在將對(duì)象轉(zhuǎn)換為json格式的數(shù)據(jù)的時(shí)候,出現(xiàn)了無限遞歸調(diào)用的情況。
具體的情況如下
A類中,有個(gè)屬性:List<B> b, A與B的關(guān)系為 OneToMany;在B類中,有屬性A a,引用到A中的字段id,并作為外鍵。hibernate查詢結(jié)果正常,可以看到返回的A對(duì)象中,有b參數(shù)值,但在json轉(zhuǎn)換的時(shí)候就出現(xiàn)了無限遞歸的情況。
個(gè)人分析,應(yīng)該是json在序列化A中的b屬性的時(shí)候,找到了B類,然后序列化B類,而B類中有a屬性,因此,為了序列化a屬性,json又得去序列化A類,如此遞歸反復(fù),造成該問題。
同時(shí)值得注意的是必須重寫其中一個(gè)類toString方法,去除其中另一個(gè)類的內(nèi)容,否則也會(huì)造成無限遞歸的產(chǎn)生。
解決
在B類中a的getter setter方法上加注解@JsonBackReference,只在setter方法上加@JsonBackReference也夠了。
如果是使用lombok注解,可以直接在B類的a字段上添加注解@JsonBackReference
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法
這篇文章主要介紹了詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09Redis內(nèi)存數(shù)據(jù)庫(kù)示例分析
Redis本身的內(nèi)容比較復(fù)雜。如果你上來,你應(yīng)該研究一個(gè)細(xì)節(jié)點(diǎn),比如連接池和數(shù)據(jù)結(jié)構(gòu)。雖然可以直接了解某一點(diǎn)的詳細(xì)來源內(nèi)容,甚至盡快解決一些意外,但是容易淹沒在失眠的細(xì)節(jié)中,整體控制不了Redis2022-12-12Java那點(diǎn)兒事之Map集合不為人知的秘密有哪些
Map用于保存具有映射關(guān)系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的key,另一組保存著Map的value,和查字典類似,通過key找到對(duì)應(yīng)的value,通過頁(yè)數(shù)找到對(duì)應(yīng)的信息。用學(xué)生類來說,key相當(dāng)于學(xué)號(hào),value對(duì)應(yīng)name,age,sex等信息。用這種對(duì)應(yīng)關(guān)系方便查找2021-10-10基于CopyOnWriteArrayList并發(fā)容器(實(shí)例講解)
下面小編就為大家?guī)硪黄贑opyOnWriteArrayList并發(fā)容器(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11Java服務(wù)調(diào)用RestTemplate與HttpClient的使用詳解
無論是微服務(wù)還是SOA,都面臨著服務(wù)間的遠(yuǎn)程調(diào)用,這篇文章主要介紹了服務(wù)調(diào)用RestTemplate與HttpClient的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06小議Java的源文件的聲明規(guī)則以及編程風(fēng)格
這篇文章主要介紹了小議Java的源文件的聲明規(guī)則以及編程風(fēng)格,僅給Java初學(xué)者作一個(gè)簡(jiǎn)單的示范,需要的朋友可以參考下2015-09-09springboot實(shí)現(xiàn)修改請(qǐng)求狀態(tài)404改為200
這篇文章主要介紹了springboot實(shí)現(xiàn)修改請(qǐng)求狀態(tài)404改為200方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過程
這篇文章主要介紹了SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過程,對(duì)于Java后端來說肯定實(shí)現(xiàn)定時(shí)功能肯定是使用到Spring封裝好的定時(shí)調(diào)度Scheduled2023-04-04