Grails/Hibernate标准id inList

Grails/Hibernate标准id inList,hibernate,grails,groovy,criteria,Hibernate,Grails,Groovy,Criteria,这个问题是基于我问的那个问题。同样的关系和同样的目标。我有一个例子。我想得到所有Foo的实例,这些实例与所有Bar的实例相关联,这些Bar的实例与我拥有的东西的实例相关联 我的模型中有一个方法,它根据一些条件返回对象列表 class Foo { static List findAllAssociatedWith( Object obj ) { def results = null if( obj instanceof Bar) {

这个问题是基于我问的那个问题。同样的关系和同样的目标。我有一个例子。我想得到所有Foo的实例,这些实例与所有Bar的实例相关联,这些Bar的实例与我拥有的东西的实例相关联

我的模型中有一个方法,它根据一些条件返回对象列表

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.bar.id
返回我要检查的id列表,但显然它是一个整数数组列表,即使需要长字符。这是我得到的错误:

java.util.ArrayList cannot be cast to java.lang.Long. Stacktrace follows:
Message: java.util.ArrayList cannot be cast to java.lang.Long
为什么
Thing.bar.id
返回的是整数列表而不是长整数列表?我该如何修复它?

更新:

我在调用
println Things.bar.id
后发现问题。我希望它返回一个数字(整数或长整数)的数组列表,如下所示:

[3,4]
[ [ 3, 4 ], [] ]
但是我得到了一个ArrayList of ArrayList,其中第一个数组列表是我想要的,第二个数组列表是一个空列表,如下所示:

[3,4]
[ [ 3, 4 ], [] ]

不确定Grails为什么会这样做,但目前一个简单的解决方法是
Thing.bar.id.get(0)
如果没有看到
Thing.bar的定义,很难判断这里发生了什么。但是,如果您有一个要转换为长整数的整数列表,则可以使用

Thing.bars.id*.asType(Long)

ubiquibacon,您可以使用展平方法将数组展平为简单数组 Thing.bar.id.flatten()


您的[[3,4],]]变成了[3,4]

谢谢您的快速回复。我在不久前问了一个类似的问题,并通过一个链接更新了这个问题,该链接回到了我之前的问题,该问题带有图形。