JPA之多對多查詢死循環(huán)嵌套問題及解決方案
問題
我在嘗試用JPA來學(xué)Shiro的時候,如果雙向查詢,那么就會發(fā)生死循環(huán)嵌套造成stackOverFlow
肯定是百度過的撒,然后總結(jié)一下。
首先這不是JPA的問題,在controller接口中會進行JSON的序列化,因為雙向的查詢,就會發(fā)生查詢時的嵌套循環(huán),然后呢就棧溢出了
JPA生成的表結(jié)構(gòu)
解決方法有兩種
(1)不要雙向查詢
(2)在雙向查詢時用 @JsonIgnoreProperties
忽略掉一個方向的字段
這樣的化在轉(zhuǎn)化為JSON后就不會查那個字段了
toString()的問題
這樣的話解決了轉(zhuǎn)化為JSON的死循環(huán)嵌套,那么toString()
呢?
清空一個方向上的關(guān)于自己的集合,就可以斷開死循環(huán)嵌套了。
事實上
事實上也不太可能出現(xiàn)這樣情況,我只是為了讓三個表沒有從屬關(guān)系才雙向查詢的。
然而一般的多對多關(guān)系都會有明顯的從屬關(guān)系
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java通過PropertyDescriptor反射調(diào)用set和get方法
這篇文章主要為大家詳細介紹了Java通過PropertyDescriptor反射調(diào)用set和get方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03MyBatis使用標(biāo)簽動態(tài)操作數(shù)據(jù)庫詳解
這篇文章主要介紹了MyBatis中使用標(biāo)簽動態(tài)操作數(shù)據(jù)庫的方法,動態(tài)SQL是指在運行PL/SQL塊時動態(tài)輸入SQL語句,是Mybatis的強大特性之?,能夠完成不同條件下不同的sql拼接,需要的朋友可以參考下2024-05-05Java中ExecutorService和ThreadPoolExecutor運行原理
本文主要介紹了Java中ExecutorService和ThreadPoolExecutor運行原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08Java簡單使用EasyExcel操作讀寫excel的步驟與要點
相信現(xiàn)在很多搞后端的同學(xué)大部分做的都是后臺管理系統(tǒng),那么管理系統(tǒng)就肯定免不了Excel的導(dǎo)出導(dǎo)入功能,下面這篇文章主要給大家介紹了關(guān)于Java簡單使用EasyExcel操作讀寫excel的步驟與要點,需要的朋友可以參考下2022-09-09SpringBoot如何實現(xiàn)同域SSO(單點登錄)
單點登錄(SingleSignOn,SSO),就是通過用戶的一次性鑒別登錄。即在多個應(yīng)用系統(tǒng)中,只需要登錄一次,就可以訪問其他相互信任的應(yīng)用系統(tǒng),本文將介紹SpringBoot如何實現(xiàn)同域SSO(單點登錄)2021-05-05