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