SpringBoot JPA懶加載失效的解決方案(親測有效)
SpringBoot JPA懶加載失效
使用springBoot JPA 對兩個實體類進(jìn)行雙向關(guān)聯(lián),并設(shè)置了懶加載,如下:
然后在查詢后用到了roles,會報錯,
解決辦法如下:
1. 在配置文件中加入:
spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true
2. 如果你是在SpringBoot的測試類 中使用報錯,則在方法上加入@Transactional注解
在百度查詢時發(fā)現(xiàn)有人說 修改該配置: spring.jpa.open-in-view=true ,經(jīng)測試,該項配置默認(rèn)就是true,并且沒有用。
JPA懶加載引起的bug
自己閑暇用JPA寫了個ORM操作的練習(xí),發(fā)現(xiàn)一個詭異的問題。
如下圖
1:讀取的產(chǎn)品product的實際庫存stock是20,凍結(jié)庫存frozenStock是0;
2:減少該產(chǎn)品實際庫存5,凍結(jié)庫存+5;
3:重新查詢該產(chǎn)品
問題:兩個單元校驗,發(fā)現(xiàn)實際算出來的庫存差值不是5是0!
博主通過查詢商品信息findProductById()方法得到答案。如下圖,調(diào)用方法返回的實體類product的屬性都是null,F(xiàn)7進(jìn)入調(diào)試才去查詢產(chǎn)品的信息,查完之后才打印產(chǎn)品的名稱,即類的"懶加載"。所以在步驟1之后,步驟2修改了庫存,重新讀取product的庫存已經(jīng)是扣減過的15了。
解決:
在實體類上加上@Proxy(lazy = false)取消懶加載,直截了當(dāng)(暫時沒想到別的)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flowable整合SpringBoot實現(xiàn)的示例代碼
本文詳細(xì)介紹了如何在SpringBoot項目中整合Flowable進(jìn)行工作流管理,包括依賴引入、流程部署與啟動、表結(jié)構(gòu)、流程掛起和激活以及任務(wù)分配等關(guān)鍵操作,具有一定的參考價值,感興趣的可以了解一下2024-09-09jasypt 集成SpringBoot 數(shù)據(jù)庫密碼加密操作
這篇文章主要介紹了jasypt 集成SpringBoot 數(shù)據(jù)庫密碼加密操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11feign服務(wù)端發(fā)現(xiàn)異??蛻舳颂幚淼姆椒ń榻B
這篇文章主要給大家介紹了關(guān)于feign服務(wù)端發(fā)現(xiàn)異??蛻舳颂幚淼姆椒?,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用feign具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07當(dāng)面試官問我ArrayList和LinkedList哪個更占空間時,我是這么答的(面試官必問)
今天介紹一下Java的兩個集合類,ArrayList和LinkedList,這兩個集合的知識點幾乎可以說面試必問的。感興趣的朋友跟隨小編一起看看吧2020-08-08Netty搭建WebSocket服務(wù)器實戰(zhàn)教程
這篇文章主要介紹了Netty搭建WebSocket服務(wù)器實戰(zhàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03