findall ()이 올바른 개체 유형을 반환하지 않습니다
문제
ItemTag 객체에는 항목 객체와 태그 객체가 포함되어 있습니다. (이것은 Java 도메인 개체입니다.)
이 간단한 쿼리는 예상대로 작동합니다. 나는 목록 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'
사용 가능한 물체를 얻으려면 어떻게해야합니까? 감사!
해결책
최대 절전 모드에서
"from ItemTag b, Tag a where b.tag= a"
쿼리는 크로스 조인입니다. 이 쿼리의 결과는 첫 번째 항목이 ItemTag 인스턴스이고 두 번째는 태그 인스턴스 인 객체 배열 목록입니다.
예를 들어 사용해야합니다
(ItemTag) theTags2[0][0]
첫 번째 ItemTag 인스턴스에 액세스하려면
다른 팁
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")
제휴하지 않습니다 StackOverflow