2009-07-07 14 views
0

ItemTag-Objekte enthalten ein Item-Objekt und ein Tag-Objekt. (Dies sind Java-Domänenobjekte.)findAll() Nicht zurückgeben Korrekter Objekttyp

Diese einfache Abfrage funktioniert wie erwartet. Ich erhalte eine Liste ItemTags zurück und kann all die schönen Dinge, die ItemTags tun sollen:

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

Zum Beispiel:

println(theTags1[0].tag.tag) 

gibt mir dies wie erwartet:

Pilgrim's Progress 

Sobald ich jedoch eine weitere Tabelle zu den Kriterien hinzufüge, bekomme ich statt einer Liste von ItemTags nur eine Liste generischer Objekte.

beispiels folgenden

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

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

kehrt

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

Und ich kann nicht verwenden, auf alle resultierenden Objekte. Zum Beispiel:

println(theTags2[0].tag.tag) 

gibt mir diese Fehlermeldung:

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

und

def exTag2 = (ItemTag) theTags2[0] 

gibt mir diese Fehlermeldung:

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

Was muss ich tun, um verwendbare Objekte? Vielen Dank!

Antwort

1

In Hibernate, die

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

Abfrage ist eine Quer beizutreten. Das Ergebnis dieser Abfrage ist eine Liste von Object-Arrays, wobei das erste Element eine ItemTag-Instanz und das zweite Element eine Tag-Instanz ist.

Sie müssen z.

(ItemTag) theTags2[0][0]

für den Zugriff auf die erste ItemTag-Instanz.

+0

Das ist genau das, was ich brauchte. Nur der Vollständigkeit halber verwende ich: (Tag) theTags2 [0] [1] –

1

Angenommen, Sie sind nur versuchen, die ItemTag zu erhalten Objekt, das Sie auch die HQL zu so etwas wie ändern können:

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

, dass es Ihnen nur einen wollen erzählt Objekt. Sie sollten in der Lage, auch eine Bedingung wie etwas, was ich denke, kommen Sie zu verwenden:

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

mit 'Select' ist in der Tat die richtige Antwort –