的findAll()不返回正确的对象类型(findAll() Not Returning Corre

2019-10-16 20:13发布

ItemTag对象包含一个Item对象和标签对象。 (这是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'

我需要什么做的就是可重用的对象? 谢谢!

Answer 1:

在Hibernate中,

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

查询是交叉联接。 此查询的结果是Object数组列表,其中第一项是ItemTag实例,第二个是一个标签实例。

您必须使用如

(ItemTag) theTags2[0][0]

访问第一ItemTag实例。



Answer 2:

假设你只是试图让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")


文章来源: findAll() Not Returning Correct Object Type