1

ItemTag オブジェクトには、Item オブジェクトと Tag オブジェクトが含まれます。(これらは Java ドメイン オブジェクトです。)

この単純なクエリは期待どおりに機能します。リスト 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'

使用可能なオブジェクトを取得するにはどうすればよいですか? ありがとう!

4

2 に答える 2

2

ハイバネートでは、

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

クエリはクロス結合です。このクエリの結果は、最初の項目が ItemTag インスタンスで、2 番目の項目が Tag インスタンスである Object 配列のリストです。

たとえば、使用する必要があります

(ItemTag) theTags2[0][0]

最初の ItemTag インスタンスにアクセスします。

于 2009-07-07T19:58:50.273 に答える
1

ItemTag オブジェクトを取得しようとしていると仮定すると、HQL を次のように変更することもできます。

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

これは、必要なオブジェクトが 1 つだけであることを示しています。また、次のような結合条件を使用できるはずです。

def theTags2 = ItemTag.findAll("from ItemTag b where b.tag is not null")
于 2009-07-10T17:51:40.573 に答える