私は主に読み取り専用のアプリケーションを持っているので、ほとんどのクエリは Hibernate の第 2 レベルのクエリ キャッシュを使用します。ページが読み込まれるたびに実行する必要があるクエリが 1 つあるため、レイアウト GSP から次のように呼び出します。
${Book.countByApproved(true, [cache: true])}
Book
追加して、クラスの第 2 レベルのキャッシュを有効にしました。
static mapping = {
cache true
}
にBook.groovy
。また、次のように構成していますDataSource.groovy
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
この同じファイルlogSql=true
で、dataSource
ブロックを追加してクエリ ログを有効にしました。
ページをロードするたびにBook.countByApproved(true)
クエリがログに記録されるので、これは結果がクエリ キャッシュから取得されていないことを意味すると思いますか? すべてをローカルで実行しているため、キャッシュされたクエリ結果の有効期限が切れたためにキャッシュが失われる可能性はありません。
これが関連しているかどうかはわかりませんが、Hibernate Filters プラグインを使用しており、クラス用にデフォルトのフィルターが構成されていますBook
。休止状態フィルターとクエリ キャッシュの使用に問題があるのではないでしょうか?