2

おそらくそれは基本的な質問ですが、Web のどこにも答えが見つかりませんでした。

私は第 2 レベルのキャッシュ (ehcache を使用) を使用しようとしていますが、ロードしようとするたびにいくつかのオブジェクトがデータベースから取得されていることを確認しました。唯一の違いは、id ではなく、運ぶプロパティによって取得していたことです。私が作業しているシステムで URL を作成するために使用される SEO フレンドリ名。jpa/hibernate はオブジェクトの ID だけでキャッシュからオブジェクトを取得できますか? クエリキャッシュをアクティブにする必要なく動作させる方法はありますか?

4

1 に答える 1

1

jpa/hibernate はオブジェクトの ID だけでキャッシュからオブジェクトを取得できますか?

はい、2 番目のレベルのキャッシュは、または(またはHibernate API からの同等のもの)をId使用する場合などに基づいて単一のオブジェクトを検索するクエリに対して機能します。私の知る限り、これはすべての JPA 実装に適用されます。EntityManager.find()EntityManager.getReference()Session#get()Session#load()

クエリキャッシュをアクティブにする必要なく動作させる方法はありますか?

標準の JPA では、クエリ キャッシュを使用する以外に選択肢はありません。

しかし、Hibernate API を使用してもかまわない場合は、Query#iterate(). を使用Query#iterate()すると、Hibernate は ID のみを取得する SQL クエリを発行し、結果を反復処理すると、対応するエンティティがキャッシュから読み込まれます。

明らかに、第 2 レベルのキャッシュを使用していない場合Query#iterate()よりもはるかに遅くなります。Query#list()

Personally, I'd use the query cache.

See also

于 2010-10-25T00:12:00.633 に答える