首頁 >Java >java教程 >如何解決JPA和Hibernate中的N 1問題?

如何解決JPA和Hibernate中的N 1問題?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-14 18:54:02746瀏覽

How to Solve the N 1 Problem in JPA and Hibernate?

解決JPA 和Hibernate 中的N 1 問題

當執行過多的查詢來擷取關聯式資料時,就會出現N 1問題。例如,在 Hibernate 中,初始查詢會取得 N 筆記錄,並且需要 N 個附加查詢來擷取每筆記錄的關聯記錄。

要解決此問題,請使用 JOIN FETCH:

List<PostComment> comments = entityManager.createQuery(
    "select pc from PostComment pc join fetch pc.post p where pc.review = :review"
)
.setParameter("review", review)
.getResultList();

此 JOIN FETCH 急切獲取後關聯,從而消除了 N 1 個查詢。

如果需要取得多個子關聯,在初始查詢中取得一個集合,並在後續查詢中取得其他集合。

自動偵測

整合測試非常適合偵測 N 1 問題。 db-util 專案提供了自動 JUnit 斷言來驗證產生的 SQL 語句的預期數量:

@Test
public void shouldNotHaveANPlusOneQuery() {
    // code to configure and execute db-util

    Assert.assertCountOfSqlStatementsPerformed(1);
}

以上是如何解決JPA和Hibernate中的N 1問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn