我发现了一个奇怪的问题,关于grails中的查询缓存以及它的调用位置。我已经多次测试了这个并获得了相同的结果。
问题:即使我有cache:true
,bellow view \ gsp代码也会每次都访问数据库。
<g:select name="foo.thing.id" in="${Thing.findAll([cache:true])}" value="${foo.thing?.id}" />
解决方法:将查询调用推送到控制器会尊重cache:true
参数,现在它会在每次加载页面时停止访问数据库。
控制器:
def doStuff = {
def things = Thing.findAll([cache:true]);
return ['things':things]
}
查看:
<g:select name="foo.thing.id" in="${things}" value="${foo.thing?.id}" />
我正在使用Grails 1.3.7以及以下配置....
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
有没有其他人看到这个或者可以向我描述为什么它的工作方式不同?
答案 0 :(得分:2)
我不确定它为什么不起作用,但这是Grails,而不是PHP - 不在视图中进行数据库访问。