2014-06-10 68 views
2

我發現它真的很酷,在Groovy的SQL就可以做到這一點:Groovy中的動態命名參數?

def resultList = Domain.executeQuery('select * from languages where name = :name', [name: 'Groovy']) 

我試圖讓HQL「在」關鍵字與作爲參數,而不是一個固定的動態列表工作名單。

我也知道你可以使用「?」運算符爲您的SQL參數而不是使用命名參數。然而,根據這樣一個問題:「?」

Doing an "IN" query with Hibernate

的「中的」關鍵詞僅支持命名和位置參數,而不是參數。問題是,當我嘗試做這樣的事情:

def paramMap = [:] 
paramMap.put("name", "groovy") 

    def resultList = Domain.executeQuery('select * from languages where name = :name', paramMap) 

我得到一個錯誤,說我沒有指定參數名稱。所以它就好像我沒有真正指定參數「name」一樣。我已閱讀這裏命名參數Groovy的文檔:

http://groovy.codehaus.org/api/groovy/sql/Sql.html

但所有使用命名參數的例子使用預定義的參數列表。我搜索了並沒有找到使用動態參數列表映射的示例。如何將參數的動態映射傳遞給Groovy命名的SQL查詢?如果這是不可能的,我如何在動態列表中使用「in」關鍵字?

爲了清楚起見,我構建了一個動態SQL查詢,並且希望能夠隨着我一起向地圖或列表添加參數。我以前使用「?」運算符,直到我不得不使用「in」子句,這不適用於「?」。

+0

這個語法應該像你放下它一樣。你確定,你還沒有將名稱改爲例如'':名字'',忘了地圖上的鑰匙?並在旁註:您應該依賴(GORM | http://grails.org/doc/latest/guide/GORM.html)文檔而不是groovy sql文檔。 – cfrick

回答