2009-07-07 17 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

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

クエリは、クロスジョインです。このクエリの結果は、最初のアイテムがItemTagインスタンスであり、2番目のアイテムがTagインスタンスであるオブジェクト配列のリストです。

たとえば、

(ItemTag) theTags2[0][0]

最初のItemTagインスタンスにアクセスします。それはあなたが1つのオブジェクトのみを望ん伝え

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

:あなたはちょうどあなたがまたのようなものにHQLを変更することができItemTagオブジェクトを取得しようとしていると仮定すると、

+0

これは私が必要としていたものです。完全性のために、私は、タグを取得するために、私は使用します: (タグ)theTags2 [0] [1] –

1

。 また、私は何かのように思える結合条件を使用することができます:

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

を使用して '確かに正解です –

関連する問題