解決Springboot+JPA中多表關聯查詢會查詢多次的問題(n+1查詢問題)


關於JPA、hibernate“臭名昭著”的n+1次查詢,導致查詢的性能問題
 
問題重現舉例
查詢列表頁面,當查詢涉及多表關聯時,即頁面中除顯示主表字段,還顯示從表字段

期望:一個sql完成,即select a.c1, a.c2.... from a, b where a.id = b.fkid ......

實際:JPA會發送多個sql完成,第一條語句查詢主表,后面發送n條語句查詢子表,即所謂“n+1”問題,實測截圖中的sql如下,共發送多條sql完成查詢

 

修復方案

1、在實體上面注解@NamedEntityGraph,指明name供查詢方法使用,attributeNodes 指明被標注為懶加載的屬性節點

eg: @NamedEntityGraph(name = "CfgComponent.Graph", attributeNodes = {@NamedAttributeNode("type")})

2、在repository的查詢方法上面注解@EntityGraph,value屬性值為@NamedEntityGraph的name屬性值

eg: @EntityGraph(value = "CfgComponent.Graph", type = EntityGraph.EntityGraphType.FETCH)

 修復后,重新測試,只發送一個sql完成查詢

 




免責聲明!

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



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