【发布时间】:2013-05-08 12:59:23
【问题描述】:
我发现了一个关于 grails 中的查询缓存及其调用位置的奇怪问题。我已经对此进行了多次测试并得到了相同的结果。
问题:即使我打开了cache:true,下面的视图\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'
}
有没有其他人看到过这个或者可以向我描述为什么它会有不同的工作方式?
【问题讨论】: