1. ホーム

[解決済み】JPAとHibernateを使用した場合のJOINとJOIN FETCHの違いとは?

2022-04-21 16:32:44

質問

どこで通常のJOINを使用し、どこでJOIN FETCHを使用するかを理解するのを助けてください。例えば、以下の2つのクエリがあるとします。

FROM Employee emp
JOIN emp.department dep

そして

FROM Employee emp
JOIN FETCH emp.department dep

両者に違いはあるのでしょうか?もしあるならば、どのような場合にどちらを使うべきでしょうか?

解決方法は?

この 2 つのクエリでは、JOIN を使用して、少なくとも 1 つの部門に関連付けられているすべての従業員を照会しています。

しかし、違いは、最初のクエリでは、HibernateのEmployesのみを返していることです。2番目のクエリでは、Employesを返しています。 関連するすべての部門

したがって、2番目のクエリを使用すると、各従業員の部署を確認するために、再度データベースを叩く新しいクエリを実行する必要がありません。

2番目のクエリは、各従業員の部署が必要であることが確実な場合に使用できます。部署が必要ない場合は、最初のクエリを使用します。

WHERE条件を適用する必要がある場合は、このリンクを読むことをお勧めします(おそらく必要なもの)。 JPQLのquot;where;句を含むjoin fetch;をJPA 2 CriteriaQueryとして適切に表現するにはどうすればよいですか?

更新

を使用しない場合 fetch が返され続ける場合、EmployeeとDepartmentの間のマッピング( @OneToMany で設定されています。 FetchType.EAGER . この場合、任意の HQL ( fetch を使用したクエリでは FROM Employee は、すべての部門を表示します。すべてのマッピングは、*ToOne ( @ManyToOne@OneToOne ) はデフォルトでEAGERになっています。