Hibernateドキュメントによると、名前付きクエリの目的は、プロジェクト内のさまざまな場所から一部のxml内の単一の場所にHQLをクリアすることです(宣言型アプローチの場合)。つまり、クエリを変更する場合は再コンパイルは必要ありませんが、セッションファクトリのリロードは必須。これは、ほとんどの場合、クエリオブジェクトがキャッシュされるときにサーバーが起動することを意味します。しかし、アノテーションの場合、エンティティレベルで名前付きクエリを定義する必要があります。したがって、ここでもコンパイルが必要です。ここでの私の質問は、名前付きクエリがパフォーマンスにも役立つかどうかです。これが私の理解です:-
1)名前付きクエリを使用すると、クエリオブジェクトだけが第2レベルのキャッシュにキャッシュされます。クエリオブジェクトだけと言うときは、クエリ結果ではなくクエリ構文だけがキャッシュされることを意味します。その権利があれば、おそらくHQL becozの場合にのみ有用であり、HQLからネイティブクエリへの変換を回避できます。クエリが実行されるたびに、ある程度のパフォーマンスが得られます。
ただし、ネイティブSQLを使用している場合、その場合は変換が行われないため、名前付きクエリにはその利点はありません。
したがって、名前付きクエリの主な利点は、SQLの中央リポジトリを作成することです。はい、HQLの場合、ネイティブSQLへの変換時間を節約できますが、クエリオブジェクトはjvmの存続期間中存在し、メモリを消費することに注意してください。したがって、ここでトレードオフするものもあります。