Этот вопрос основан на вопросе, который я задал здесь. Те же отношения и та же цель. У меня есть экземпляр Thing. Я хочу получить все экземпляры Foo, связанные со всеми экземплярами Bar, которые связаны с имеющимся у меня экземпляром 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
возвращает список идентификаторов, которые я хочу проверить, но, по-видимому, это 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
возвращает список целых чисел вместо списка длинных и как это исправить?
ОБНОВЛЕНИЕ:
Я обнаружил проблему после звонка println Things.bars.id
. Я ожидал, что он вернет ArrayList чисел (целые или длинные) следующим образом:
[3,4]
но вместо этого я получил ArrayList из ArrayLists, где первый список массивов был тем, что я хотел, а второй список массивов был пустым списком, например:
[ [ 3, 4 ], [] ]
Не уверен, почему Grails делает это, но на данный момент есть простой способ обойти это Thing.bars.id.get( 0 )
.