4

コントローラーから呼び出される次のクエリをキャッシュしようとしています。

def approvedCount = 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)クエリがログに記録されるので、これは結果がクエリ キャッシュから取得されていないことを意味すると思いますか? すべてをローカルで実行しているため、キャッシュされたクエリ結果が (別のユーザーの操作によって) 無効化されたためにキャッシュが失われる可能性はありません。

4

1 に答える 1

6

あなたが提出したJIRA の問題を確認しますが、HQL が機能するため、動的ファインダーの問題のように見えます。

Book.executeQuery(
   'select count(*) from Book where name=:name',
   [name: 'foo'], [cache: true])

条件クエリと同様:

def count = Book.createCriteria().count {
   eq 'name', 'foo'
   cache true
}
于 2013-05-18T20:35:28.273 に答える