2013-05-08 47 views
1

我在grails中查詢緩存和調用它的地方發現了一個奇怪的問題。我已經測試了幾次,並得到了相同的結果。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' 
} 

有其他人看到這或者可以向我描述爲什麼它會以不同的方式工作?

回答

2

我不知道爲什麼它不起作用,但這是Grails,而不是PHP - 不要在視圖中執行數據庫訪問。

+0

非常贊同。這絕對是一個不好的做法。 MVC架構背後的主要原因是關注點分離。 – dmahapatro 2013-05-08 19:01:57