SpringBoot JPA懶加載失效的解決方案(親測(cè)有效)
使用springBoot JPA 對(duì)兩個(gè)實(shí)體類進(jìn)行雙向關(guān)聯(lián),并設(shè)置了懶加載,如下:

然后在查詢后用到了roles,會(huì)報(bào)錯(cuò),

1. 在配置文件中加入:
spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true
2. 如果你是在SpringBoot的測(cè)試類 中使用報(bào)錯(cuò),則在方法上加入@Transactional注解
在百度查詢時(shí)發(fā)現(xiàn)有人說(shuō) 修改該配置: spring.jpa.open-in-view=true ,經(jīng)測(cè)試,該項(xiàng)配置默認(rèn)就是true,并且沒(méi)有用。
JPA懶加載引起的bug自己閑暇用JPA寫了個(gè)ORM操作的練習(xí),發(fā)現(xiàn)一個(gè)詭異的問(wèn)題。
如下圖
1:讀取的產(chǎn)品product的實(shí)際庫(kù)存stock是20,凍結(jié)庫(kù)存frozenStock是0;
2:減少該產(chǎn)品實(shí)際庫(kù)存5,凍結(jié)庫(kù)存+5;
3:重新查詢?cè)摦a(chǎn)品
問(wèn)題:兩個(gè)單元校驗(yàn),發(fā)現(xiàn)實(shí)際算出來(lái)的庫(kù)存差值不是5是0!博主通過(guò)查詢商品信息findProductById()方法得到答案。如下圖,調(diào)用方法返回的實(shí)體類product的屬性都是null,F(xiàn)7進(jìn)入調(diào)試才去查詢產(chǎn)品的信息,查完之后才打印產(chǎn)品的名稱,即類的'懶加載'。所以在步驟1之后,步驟2修改了庫(kù)存,重新讀取product的庫(kù)存已經(jīng)是扣減過(guò)的15了。
解決:在實(shí)體類上加上@Proxy(lazy = false)取消懶加載,直截了當(dāng)(暫時(shí)沒(méi)想到別的)



以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解Android studio 動(dòng)態(tài)fragment的用法2. 編程語(yǔ)言PHP在Web開發(fā)領(lǐng)域的優(yōu)勢(shì)在哪?3. Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)4. Android如何加載Base64編碼格式圖片5. 什么是python的自省6. 解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題7. 基于android studio的layout的xml文件的創(chuàng)建方式8. 圖文詳解vue中proto文件的函數(shù)調(diào)用9. Vuex localStorage的具體使用10. 在IDEA中實(shí)現(xiàn)同時(shí)運(yùn)行2個(gè)相同的java程序

網(wǎng)公網(wǎng)安備