この質問は、私がここで尋ねたものに基づいています。同じ人間関係、同じ目標。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.id
Long のリストではなく Integer のリストを返すのはなぜですか? どうすれば修正できますか?
アップデート:
に電話した後、問題が見つかりましたprintln Things.bars.id
。次のような数値 (Integers または Long) の ArrayList を返すことを期待していました。
[3,4]
しかし、代わりに、次のように、最初の配列リストが必要なもので、2 番目の配列リストが空のリストである ArrayLists の ArrayList を取得しました。
[ [ 3, 4 ], [] ]
なぜ Grails がこれを行うのかはわかりませんが、今のところ簡単な方法は次のとおりです。Thing.bars.id.get( 0 )