这个问题是基于我在这里问的。相同的关系和相同的目标。我有一个事物的实例。我想获取与我拥有的 Thing 实例相关联的所有 Bar 实例相关联的 Foo 的所有实例。
我的模型中有一个方法,它根据某些条件返回对象列表。
class Foo {
static List findAllAssociatedWith( Object obj ) {
def results = null
if( obj instanceof Bar) {
results = Foo.withCriteria() {
bars{
//inList( "id", Thing.bars.id ) // this does not work
inList( "id", [new Long(3), new Long(4)] ) // this works
}
}
}
return results
}
}
Thing.bars.id
返回我要检查的 id 列表,但显然它是一个整数的 ArrayList,即使预期为 Long。这是我得到的错误:
java.util.ArrayList cannot be cast to java.lang.Long. Stacktrace follows:
Message: java.util.ArrayList cannot be cast to java.lang.Long
为什么Thing.bars.id
返回整数列表而不是长整数列表,我该如何解决?
更新:
我打电话后发现了问题println Things.bars.id
。我希望它返回一个数字(整数或长整数)的 ArrayList,如下所示:
[3,4]
但相反,我得到了 ArrayLists 的 ArrayList,其中第一个数组列表是我想要的,第二个数组列表是一个空列表,如下所示:
[ [ 3, 4 ], [] ]
不知道为什么 Grails 会这样做,但现在一个简单的方法是Thing.bars.id.get( 0 )