2012-03-15 2 views
3

케이스 내에서 HQL 서브 쿼리 실행시 문제가 발생합니다. 어떤 도움Hibernate 서브 쿼리 케이스 내 케이스

select case when a.entityId is null then 'invalid' else 
    (select b.entityName from tblName b where b.entityId =a.entityId) 
    end from tblEntity a 

감사 :

여기 내 코드입니다!

좋아 .. 여기이 기능은 최대 절전 모드에서 지원되지 않습니다 전체 스택 추적

ERROR org.hibernate.hql.PARSER - <AST>:0:0: unexpected AST node: query 
Exception in thread "Thread-5" org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: query [select case when a.entityId is null then 'invalid' else 
     (select b.entityName from tblName b where b.entityId =a.entityId) 
     end from tblEntity a] 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651) 
+1

어떤 오류가 있습니까? – ManuPK

+0

org.hibernate.hql.ast.QuerySyntaxException : 예기치 않은 AST 노드 –

+0

아직 단서 없음! 질문을 편집하고 ** complete stack trace **를 추가하십시오! – ManuPK

답변

2

입니다. 그러나 해결 방법이 있습니다. 데이터베이스에 뷰를 생성하고 HQL을 사용하여 java를 통해 결과를 가져옵니다.

생성하거나 a.entityId 다음 '무효'다른 널 때 선택한 경우 효력 뷰 VW_ENTITY_VALUE (EntityValue에) 대체 (tblName b로부터 b.entityName을 선택 여기서 b.entityId = a.entityId) 단부로부터 tblEntity a; HQL의 문서에서

: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries

14.13. 하위 쿼리

하위 선택을 지원하는 데이터베이스의 경우, 최대 절전 모드는 쿼리 내에서 하위 쿼리를 지원합니다. 하위 쿼리는 괄호로 묶어야합니다 (대개 SQL 집계 함수 호출을 통해). 상관 된 하위 쿼리 (외부 쿼리의 별칭을 참조하는 하위 쿼리)조차도 허용됩니다.

fatcat 같은 고양이에서

곳 고양이 로 DomesticCat과에서 fatcat.weight> (DomesticCat과 고양이 에서 선택 평균 (cat.weight)) 여기서 cat.name = 이름과 같은 이름의 일부 ( 선택 name.nickName 친구 같은 고양이에서없는 존재 고양이 ( 같은 고양이에서) 곳 mate.mate = 고양이 ) DomesticCat과에서 고양이 같은 곳 cat.name하지 이름으로 이름에서 ( 선택 name.nickName에서 ) cat.id, (sel을 선택하십시오. ect max (kit.weight) from cat.kitten kit cat from cat HQL 서브 쿼리는 select 또는 where 절에서만 발생할 수 있습니다.