JPA と Hibernate で N 1 問題に効果的に対処するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-25 06:09:13
オリジナル
670 人が閲覧しました

How to Effectively Tackle the N 1 Problem in JPA and Hibernate?

JPA と Hibernate の N 1 問題に効果的に取り組む

N 1 クエリの問題は、最初のクエリが N レコードを取得し、その後クエリが実行され、これらの N 個のレコードごとに関連するリレーショナル レコードが取得されます。 Hibernate でこの問題を解決するには、包括的なアプローチが必要です。

問題の理解

N 1 クエリの問題は、関連付けられた関係を初期化せずにレコードをフェッチすると発生します。後でその関係にアクセスしようとすると、Hibernate は追加のクエリを実行して必要な情報を取得します。この結果、単一のクエリではなく N 1 個のクエリが実行されます。

問題の解決

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 つのコレクションをフェッチし、残りは別のクエリで。

自動化検出

N 1 クエリの問題をシームレスに検出するには、自動 JUnit アサーションを統合テストに組み込むことを強くお勧めします。 db-util のようなツールは、生成された SQL ステートメントの数を検証するためのオープンソース ユーティリティを提供し、コードが知らず知らずのうちにこのパフォーマンスのボトルネックに悩まされることを防ぎます。

以上がJPA と Hibernate で N 1 問題に効果的に対処するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート