2009-07-07 2 views
0

Объекты ItemTag содержат объект Item и объект Tag. (Это объекты домена Java.)findAll() Не возвращает правильный тип объекта

Этот простой запрос работает так, как ожидалось. Я вернусь список ItemTags и может сделать все замечательные вещи, которые ItemTags должны делать:

def theTags1 = ItemTag.findAll("from ItemTag b") 

Например:

println(theTags1[0].tag.tag) 

дает мне это, как и ожидалось:

Pilgrim's Progress 

Однако, как только я добавлю другую таблицу к критериям, вместо получения списка ItemTags, я просто получаю список общих объектов.

например следующие

def theTags2 = ItemTag.findAll("from ItemTag b, Tag a where b.tag= a") 

theTags2.each { 
    theClass = it.getClass(); 
    nameOfClass = theClass.getName(); 
    println(nameOfClass) 
} 

возвращается

[Ljava.lang.Object; 
[Ljava.lang.Object; 
[Ljava.lang.Object; 

И я не могу использовать полученные объекты на всех. Например:

println(theTags2[0].tag.tag) 

дает мне эту ошибку:

Exception evaluating property 'tag' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: tag for class: java.lang.String 

и

def exTag2 = (ItemTag) theTags2[0] 

дает мне эту ошибку:

Cannot cast object '[Ljava.lang.Object;@2d81f' with class '[Ljava.lang.Object;' to class 'org.maflt.flashlit.pojo.ItemTag' 

Что мне нужно сделать, чтобы получить пригодных для использования объектов? Благодаря!

ответ

1

В Hibernate, запрос

"from ItemTag b, Tag a where b.tag= a"

является перекрестное соединение. Результатом этого запроса является список массивов объектов, где первый элемент является экземпляром ItemTag, а второй - экземпляром тега.

Вы должны использовать, например.

(ItemTag) theTags2[0][0]

для доступа к первому экземпляру ItemTag.

+0

Это именно то, что мне нужно. Только для полноты, чтобы получить тег, я использую: (тег) theTags2 [0] [1] –

1

Предполагая, что вы просто пытаетесь получить ItemTag объект, который вы также можете изменить HQL к чему-то вроде:

def theTags2 = ItemTag.findAll("select b from ItemTag b, Tag a where b.tag= a") 

Это говорит это вы хотите только один объект. Вы также должны быть в состоянии использовать условие соединения. Я думаю, что-то вроде:

def theTags2 = ItemTag.findAll("from ItemTag b where b.tag is not null") 
+0

с использованием «select» - действительно правильный ответ –

Смежные вопросы