2012-07-17 97 views
6

我有這樣一個類:獲取所有對象的ID列表中的

class Foo { 
    String bar 
} 

我試圖讓所有的Foo對象,其bar字符串是列表bars的ID。我已經嘗試過多種方法,總是收到了同樣的錯誤:

java.lang.String cannot be cast to java.util.Collection 

一些我已經試過的東西:

def ids = Foo.findAllByBarInList(bars)*.id 
def ids = Foo.findAllByBarInList(bars).collect{ it.id } 
def ids = Foo.findAllByBarInList(bars).collect{ it -> it?.id } 

UPDATE:

我正在barssplit如此它是一個數組,而不是一個列表。它把我扔了,因爲Foo.findAllByBarInList(bars)返回我的Foo對象就好了,只有當我試圖收集ID時纔會失敗。我現在使barstokenize,而一切都很好。

+0

我將groovy標記添加回此問題,因爲'collect'方法和spread運算符'* .'都基於groovy。 – ubiquibacon 2012-07-17 18:54:06

+0

您確定您正在檢查的列表是否正確設置爲列表?使用'def ids = Foo.findAllByBarInList(bars)*。id'適用於我。 – Kelly 2012-07-17 18:56:50

+2

自從Grails使用Groovy以來,我不再使用Groovy標籤,因此它不是必需的,它只是在Grails中使用Groovy,而不是Groovy特定的問題。沒有Grails經驗的Groovy專家無法爲您提供幫助。同樣,你可以省略Java,GORM,Hibernate,Spring,編程標籤;) – 2012-07-17 18:58:45

回答

12

這對我來說,只要可以作爲bars是一個List

def bars = ['bar1', 'bar3'] 
def ids = Foo.findAllByBarInList(bars)*.id 

但是如果你想要的是id場是從數據庫中提取整個域類實例的浪費。現在只有一個領域,但實際上它可能會是一個更大的桌子。所以我會使用HQL查詢: