【问题标题】:Grails not using query cache in viewGrails 未在视图中使用查询缓存
【发布时间】: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'
}

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

【问题讨论】:

    标签: hibernate grails


    【解决方案1】:

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

    【讨论】:

    • 强烈同意。这绝对是一个不好的做法。 MVC 架构背后的主要原因是关注点分离。
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多