2012-06-20 3 views
3

Этот вопрос основан на том, что я спросил 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)

ответ

0

Не видя определение для Thing.bars, это трудно сказать, что здесь происходит. Тем не менее, если у вас есть список Целые вы хотите, чтобы превратиться в Longs, вы можете использовать

Thing.bars.id*.asType(Long) 
+0

Спасибо за быстрый ответ. Я задал аналогичный вопрос несколько назад и обновил этот вопрос со ссылкой на мой предыдущий вопрос, который имеет графику. – ubiquibacon