这个问题是基于我问的here。相同的关系和相同的目标。我有一个Thing实例。我想获取与Bar的所有实例相关联的Foo的所有实例,这些实例与我拥有的Thing实例相关联。
我的模型中有一个方法可以根据某些条件返回对象列表。
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 of Integers,即使需要Longs。这是我得到的错误: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
返回一个Integer列表而不是Longs列表,我该如何解决? 更新:
我在调用
println Things.bars.id
后发现了问题。我希望它返回一个数字的ArrayList(整数或长整数),如下所示:[3,4]
但是我得到了一个ArrayLists的ArrayList,其中第一个数组列表是我想要的,而第二个数组列表是一个空列表,如下所示:
[ [ 3, 4 ], [] ]
不确定为什么Grails会这样做,但是现在解决这个问题的一种简单方法是
Thing.bars.id.get( 0 )
最佳答案
泛素细菌,您可以通过使用flatten方法将数组数组展平为简单数组
Thing.bars.id.flatten()
您的[[3,4],[]]变成[3,4]
关于hibernate - Grails/hibernate 标准ID inList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124686/