使用JPA標準從數據庫中的數據和確認的相關太多的SQL調用(子實體)一個持久性問題獲取我的應用D B。
這裏拿一個例子:
ENTITY_A (parent) with 500 item types record
ENTITY_B (child-1) with 1000 item details record
ENTITY_C (child-2) with 1000 item details record
ENTITY_D (child-3) with 1000 item details record
按規定,我們需要與其子(所有實體)一起取的母公司數據。子實體已在父實體中映射到fetch=FetchType.LAZY
。
問題:
當我們嘗試獲取500種項目類型(ENTITY_A),那麼SQL調用的數量以下面的方式調用:
- 1呼籲Entity_A列表(以獲取所有的500條記錄)
- 500 SQL呼籲Entity_B列表(獲取所鏈接的父ID記錄)
- 500 SQL呼籲Entity_C列表(獲取所鏈接的父ID記錄)
- 500 SQL調用用於Entity_D列表(抓取爲鏈接父ID的記錄)
我知道一個替代是從標準到SQL的過程調用(這將最終返回所有數據用單個SQL切換調用SQL類型)
的形式是否有使用它我們可以限制SQL調用以這種方式dB的替代方法?
一些想法如何緩解N + 1 [此線索]選擇問題(https://stackoverflow.com/questions/32453989/what-is只解僱-The的解決方案,換了-N1-問題,在眠)。 –
隨着標準的查詢,你可以使用'root.fetch()'與子實體以加載它們在相同的查詢。一個普通的區別聯接和獲取參加在這裏解釋說:https://stackoverflow.com/questions/17431312/difference-between-join-and-join-fetch-in-hibernate。此外,在這裏看到:https://stackoverflow.com/questions/17306655/using-the-jpa-criteria-api-can-you-do-a-fetch-join-that-results-in-only-one-joi舉一個例子。 – crizzis