新しいプロジェクトを調査しているときに、一部のクエリ結果を Hibernate キャッシュに明示的にプリフェッチするという意味を持つ、いくつかのレガシー コードに遭遇しました。
そのコードによって解決されるタスクは、属性値に基づいてエンティティを選択することです。
例えば:
SELECT c
FROM MyEntity c
LEFT OUTER JOIN c.relatedEntity relatedEntity
WHERE c.field1 = :param1 AND relatedEntity.field1 = :param2 AND relatedEntity.field2 = :param3
推奨される改善は、このクエリを実行する前にすべてのエンティティをプリフェッチすることです。つまり、メインのクエリの前に次のクエリのいずれかを実行します。
SELECT c, relatedEntity FROM MyEntity c LEFT OUTER JOIN c.relatedEntity relatedEntity
また
SELECT FROM MyEntity;
SELECT FROM RelatedEntity;
この種の最適化についてどう思いますか? それは役に立ちますか?「はい」の場合、どのような状況ですか?