3

この質問は、私がここで尋ねたものに基づいています。同じ人間関係、同じ目標。Thing のインスタンスがあります。私が持っている 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のリストを返しますが、Longが予想されていても明らかにIntegerのArrayListです。これは私が得るエラーです:

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.idLong のリストではなく Integer のリストを返すのはなぜですか? どうすれば修正できますか?

アップデート:

に電話した後、問題が見つかりましたprintln Things.bars.id。次のような数値 (Integers または Long) の ArrayList を返すことを期待していました。

[3,4]

しかし、代わりに、次のように、最初の配列リストが必要なもので、2 番目の配列リストが空のリストである ArrayLists の ArrayList を取得しました。

[ [ 3, 4 ], [] ]

なぜ Grails がこれを行うのかはわかりませんが、今のところ簡単な方法は次のとおりです。Thing.bars.id.get( 0 )

4

2 に答える 2

0

の定義を見ないThing.barsと、ここで何が起こっているのかを知るのは困難です。ただし、Longsに変換したい整数のリストがある場合は、次を使用できます。

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