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