2011-11-05 54 views
4

在Grails 2.0中定義where查詢時可以使用參數嗎?例如:在Grails 2.0中查詢的新參數

def query = Book.where { 
    id == it 
} 
Book sub = query.find(5) 

我試着運行該代碼,但它在調用find時拋出了MissingMethodException。我也嘗試過在它之前定義一個變量,但它似乎不起作用(即使我知道它存在,查找返回null)。

Long someId = 5 
def query = Book.where { 
    id == someId 
} 
Book sub = query.find() 

任何詭計?能夠動態更改查詢的參數將非常有用。

(我知道我可以只使用Book.get(5),但是爲了簡單起見,這似乎是最簡單的例子來接)

回答

-1

好像要做到這一點的方式來定義閉包作爲detachCriteria ,

import grails.gorm.* 

def callable = { id -> 
    id == id 
} as DetachedCriteria<Book> 

def query = Book.where(callable(id: 5)) 
+0

看起來它應該工作,但是當我嘗試它時,仍然不會去(MissingMethodException,抱怨沒有eq方法)。還改變了參數someId所以它不試圖比較自己,並嘗試callable(5)(沒有地圖),都沒有運氣。我認爲答案是,您必須使用namedQueries來執行此操作。不幸的是,因爲新的語法非常好! – Todd