Grails のクエリ キャッシュとそれが呼び出される場所に関する奇妙な問題を発見しました。これを数回テストしましたが、同じ結果が得られました。
問題:以下の view\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'
}
他の誰かがこれを見たことがありますか、またはなぜそれが異なる動作をするのか私に説明できますか?