JPA 懶加載實踐 fetch = FetchType.LAZY


項目里用到JPA關系映射,導致一個普通的查詢方法會執行數十條sql,使用懶加載的方式解決。當時配置過懶加載之后,還是失效 會執行sql 於是反復試驗 排查得出一些結論。

 

 

 

 

 第一次我的代碼是這樣的,感覺應該沒有問題。但是每次執行到打斷點這一行,會執行關聯查詢的sql。

坑!坑!坑!這里有坑請注意  最后排查發現是因為我的實體類用了lombok的@Data注解導致的。單獨使用@Getter 和 @Setter方法就可以了。

我還測試了第二種方法,直接返回實體類對象,但是才開始會報一個cast錯誤 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 錯誤 大意就是 數據類型轉換失敗,懶加載的字段查出來並不為null而是一個叫hibernateLazyInitializer的東西  於是百度到@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})  這樣的寫法  雖然不報錯了  但是return 的時候還是會去執行sql,只有把這個字段@JsonIgnore才正常

注意 不加@JsonIgnore就必須加@JsonIgnoreProperties(value = { "hibernateLazyInitializer"}) 否則JPA直接輸出就會報錯

1. 所以總結出兩種用法,第一種就是查出來之后 利用VO封裝,但是注意實體類不能用lombok的@Data及以上的注解。

2. 直接返回實體類,但是需要把lazy字段 忽略掉 才可以,如果其他時候要用到 需要繼續封裝VO賦值才可以。

 

僅作為個人經驗總結,歡迎指教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM