JPA 解決n 1次查詢問題

2021-10-09 03:16:08 字數 681 閱讀 7914

分兩步操作:

1、主表實體類中,新增註解@namedentitygraph

如上,設定name值,並指定attributenodes(看名字就知道可以指定多個),每個node的值如下圖紅框:

2、在主表的dao方法中 重寫用到的查詢方法,service層中呼叫什麼方法就重寫什麼方法,我這邊用到的是:

pagefindall( specificationvar1, pageable var2);

並新增註解@entitygraph

最終進行測試,發現只執行了一次查詢,sql列印確定是left outer join實現

仔細看,單向一對多的情況,用的是set,雙向關聯時用的是list,因為我單向一對多用list會報錯

cannot simultaneously fetch multiple bags,所以改set了,具體沒深入研究。

that』s all~!

關於JPA級聯查詢n 1問題

因為在設計乙個樹形結構的實體中用到了多對一,一對多的對映關係,在載入其關聯物件的時候,為了效能考慮,很自然的想到了懶載入。也由此遇到了n 1的典型問題 通常1的這方,通過1條sql查詢得到1個物件,而jpa基於hibernate,fetch策略預設為select 並非聯表查詢 由於關聯的存在 又需要...

n 1次select查詢問題

什麼叫n 1次select查詢問題?在session的快取中存放的是相互關聯的物件圖。預設情況下,當hibernate從資料庫中載入customer物件時,會同時載入所有關聯的order物件。以customer和order類為例,假定orders表的customer id外來鍵允許為null,圖1列...

關於N 1次查詢

1,什麼是n 1次查詢 在使用hibernate,或者ibatis等工具查詢資料庫的時候,由於快取,或者lazyload 懶載入 等原因,可能會造成要查詢n個結果,但是不得不執行n 1次查詢資料庫操作,造成效率低下。2,使用hibernate,什麼時候會產生n 1次查詢 a,使用iterate查詢的...