4

我正在尝试缓存从控制器调用的以下查询:

def approvedCount = Book.countByApproved(true, [cache: true])

Book我通过添加为类启用了二级缓存

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 回答