获取列表中所有对象的ID

时间:2012-07-17 18:38:17

标签: grails

我有一个这样的课程:

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 }

更新

我正在使用split制作bars所以它是一个数组,而不是列表。它让我失望,因为Foo.findAllByBarInList( bars )只是在我试图收集ID时失败了Foo对象。我现在用tokenize代替bars,一切都很顺利。

1 个答案:

答案 0 :(得分:12)

只要bars是列表

,这对我有用
def bars = ['bar1', 'bar3']
def ids = Foo.findAllByBarInList(bars)*.id

但如果你想要的只是id字段,从数据库中提取整个域类实例是一种浪费。现在只有一个领域,但实际上它可能是一个更大的表。所以我使用HQL查询:

def ids = Foo.executeQuery(
   'select f.id from Foo f where f.bar in (:bars)',
   [bars: bars])