我有一个这样的课程:
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
,一切都很顺利。
答案 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])