19.4. クエリキャッシュ


クエリの結果もキャッシュ化出来ます。これは同じパラメータで何度も実行されるクエリに対してのみ有用です。クエリキャッシュを使うには、まず設定で有効にしなくてはなりません:
hibernate.cache.use_query_cache true
Copy to Clipboard Toggle word wrap
この設定は新たに二つのキャッシュ領域の作成を行います。一つはクエリのリザルトセットのキャッシュ( org.hibernate.cache.StandardQueryCache )を保持し、もう1つはクエリ可能なテーブルへの最新の更新タイムスタンプ ( org.hibernate.cache.UpdateTimestampsCache)を保持します。クエリキャッシュはリザルトセットの実際の要素の状態はキャッシュしないことに注意してください。キャッシュするのは識別子の値と、値型の結果のみです。そのため、クエリキャッシュは常に二次キャッシュと一緒に使うべきです。
ほとんどのクエリはキャッシュの恩恵を受けないので、デフォルトではクエリはキャッシュされません。キャッシュを有効にするには、Query.setCacheable(true) を呼び出してください。そうすればクエリが既存のキャッシュ結果を探し、クエリ実行時にその結果をキャッシュに追加するようになります。
クエリキャッシュの無効化ポリシーを細かく制御したいときは、 Query.setCacheRegion() を呼び出して特定のクエリに対するキャッシュ領域を指定することが出来ます。
List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
    .setEntity("blogger", blogger)
    .setMaxResults(15)
    .setCacheable(true)
    .setCacheRegion("frontpages")
    .list();
Copy to Clipboard Toggle word wrap
クエリが自身のクエリキャッシュ領域のリフレッシュを強制しなければならないなら、 Query.setCacheMode(CacheMode.REFRESH) を呼び出すべきです。これは元となるデータが別のプロセスによって更新されたり(すなわち Hibernate を通じて更新されない)、アプリケーションに特定のクエリリザルトセットを選択してリフレッシュさせる場合に特に有用です。さらに有用なもう一つの方法は、 SessionFactory.evictQueries() によってクエリキャッシュ領域を消去することです。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat