不使用Grails查询缓存

时间:2013-05-18 17:38:05

标签: hibernate caching grails gorm

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

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)查询,因此我认为这意味着未从查询缓存中检索结果?我在本地运行所有内容,因此高速缓存不可能被丢失,因为缓存的查询结果已经失效(通过另一个用户的操作)。

1 个答案:

答案 0 :(得分:4)

我会看一下你提交的JIRA issue,但由于HQL有效,它看起来像动态查找器的问题:

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

和标准查询一样:

def count = Book.createCriteria().count {
   eq 'name', 'foo'
   cache true
}