2013-05-14 61 views
0

我有一个阅读大多数应用程序,所以大多数查询使用Hibernate的第二级查询缓存。我有一个必须每一个页面加载时间执行一个查询,所以我调用它从布局GSP是这样的:Grails查询缓存被忽略

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

dataSource块添加logSql=true配置在我已经启用查询日志记录此相同的文件。

每次加载页面时,Book.countByApproved(true)查询都会被记录下来,所以我认为这意味着结果没有从查询缓存中检索出来?我在本地运行所有东西,所以不可能因为缓存的查询结果已经过期而错过缓存。

我不知道这是否相关,但我使用的是Hibernate Filters plugin并为Book类配置了默认过滤器。也许有使用hibernate过滤器和查询缓存的问题?

回答

2

如果我没有弄错。有一个问题完全等于你的问题,建议不要在GSP中使用查询。在过滤器中试试这个,看看缓存是否工作。

+0

我想到GSP中的查询可能不会被缓存,所以我尝试将它移入控制器(暂时),但它似乎仍然没有使用缓存。你有这个其他问题的链接? – 2013-05-14 13:06:56

+1

http://stackoverflow.com/questions/16441392/grails-not-using-query-cache-in-view – 2013-05-14 13:28:58