Grails在视图中不使用查询缓存

时间:2013-05-08 12:59:24

标签: hibernate grails

我发现了一个奇怪的问题,关于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'
}

有没有其他人看到这个或者可以向我描述为什么它的工作方式不同?

1 个答案:

答案 0 :(得分:2)

我不确定它为什么不起作用,但这是Grails,而不是PHP - 不在视图中进行数据库访问。