ホームページ >Java >&#&チュートリアル >JPA と Hibernate での N 1 クエリの問題を解決するには?

JPA と Hibernate での N 1 クエリの問題を解決するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 12:23:031005ブラウズ

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

JPA と Hibernate の N 1 問題の解決策は何ですか?

N 1 クエリの問題

N 1 クエリの問題は、クエリが N レコードを取得し、後続のクエリが関連エンティティをフェッチする必要がある場合に発生します。

Hibernate で N 1 の問題を解決する方法

この問題を解決するには、適切な SQL ログを有効にして問題を検出することが重要です。

JOIN の使用FETCH

主な解決策は、Hibernate の JOIN FETCH を使用して、最初のクエリで関連エンティティを積極的にロードすることです。これは、クエリを次のように変更することで実現できます。

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

追加の考慮事項

複数の子の関連付けをフェッチする必要がある場合は、最初のコレクションで 1 つのコレクションをフェッチすることを検討してください。クエリと別のクエリによる追加のコレクション。

による自動検出JUnit

統合テストを使用して、N 1 クエリの問題を自動的に検出できます。 db-util のようなフレームワークを利用すると、生成される SQL ステートメントの予想数を検証するのに役立ちます。

以上がJPA と Hibernate での N 1 クエリの問題を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。