Grails查询缓存未被使用。

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'
}

在同一个文件中,我通过在dataSource块中添加logSql=true来启用了查询日志记录。
每次加载页面时,都会记录Book.countByApproved(true)查询语句,因此我认为这意味着结果没有从查询缓存中检索出来?我正在本地运行所有内容,因此不存在缓存被其他用户的操作使缓存的查询结果无效的可能性。
1个回答

7

我会查看你提交的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
}

1
谢谢,我已经链接到 JIRA,这样其他人就可以关注它的进展了。 - Dónal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接