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 サイトの他の関連記事を参照してください。