JPA と Hibernate の JOIN と JOIN FETCH の違いを理解する
オブジェクト リレーショナル マッピングに JPA と Hibernate を利用する場合の違いを理解するJOIN と JOIN FETCH の間が重要です。どちらのクエリ構成でも関連エンティティの取得が可能ですが、動作と使用例が異なります。
通常の JOIN:
通常の JOIN 操作は、 2 つ以上のエンティティ間の INNER JOIN。クエリで指定されたプライマリ エンティティのみを取得し、関連エンティティの一括読み込みは行いません。これは、関連するエンティティにアクセスする必要がある場合は、別のクエリを発行する必要があることを意味します。
JOIN FETCH:
一方、JOIN FETCH は次のことを実行します。プライマリ エンティティだけでなく、fetch 句で指定された関連エンティティも取得する積極的な結合。 JOIN FETCH を使用すると、関連データを取得するために追加のクエリを実行する必要がなくなります。これにより、データベースのラウンドトリップが削減され、パフォーマンスが向上します。
使用例:
- プライマリ エンティティを取得する必要があるだけで、必要な場合は通常の JOIN を使用します。関連データが必要になるとは予想していません。これにより、不必要なデータの取得が回避され、クエリのパフォーマンスが向上します。
- 関連エンティティが確実に必要で、それらを 1 つのクエリで一括ロードしたい場合は、JOIN FETCH を使用します。これにより、データベースのラウンドトリップが節約され、全体的なパフォーマンスが向上します。
クエリの例:
提供されたクエリ:
- FROM Employee emp JOIN emp.Department dep: このクエリは通常の JOIN を使用し、従業員エンティティ。明示的にクエリを実行しない限り、Department エンティティは取得されません。
- FROM Employee emp JOIN FETCH emp.Department dep: このクエリは JOIN FETCH を使用し、Employee エンティティとDepartment エンティティの両方を 1 つのクエリで一括ロードします。 query.
考慮事項:
- カーディナリティとエンティティ間のフェッチ動作を指定するために、エンティティ内で適切なマッピング関係が定義されていることを確認してください。
- データを慎重に選択していないと、積極的な読み込みがクエリのパフォーマンスに影響を与える可能性があることに注意してください。 need.
- デフォルトのフェッチ戦略は、通常の JOIN クエリの動作に影響を与える可能性があります。マッピングに対して積極的な読み込みが構成されている場合、通常の JOIN でも関連エンティティを読み込む可能性があります。
以上がJPA と Hibernate で JOIN と JOIN FETCH をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。