1

我发现了一个关于 grails 中的查询缓存及其调用位置的奇怪问题。我已经对此进行了多次测试并得到了相同的结果。

问题:即使我打开了,波纹管视图\gsp 代码每次都会访问数据库cache:true

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

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

4

1 回答 1

2

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

于 2013-05-08T14:28:10.057 回答