3

这个问题是基于我在这里问的。相同的关系和相同的目标。我有一个事物的实例。我想获取与我拥有的 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 )

4

2 回答 2

1

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

你的 [ [ 3, 4 ], [] ] 变成 [3,4]

于 2019-03-13T09:50:49.877 回答
0

如果没有看到 的定义Thing.bars,很难说出这里发生了什么。但是,如果您有一个想要转换为 Long 的整数列表,您可以使用

Thing.bars.id*.asType(Long)
于 2012-06-20T17:23:09.550 回答