2013-03-13 1 views
0

우리는최대 절전 모드 중첩 된 쿼리

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.parse(QueryTranslatorImpl.java:284) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182) 
    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:124) 
    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:1770) 

경우 주시기 바랍니다 아래 lSession.createQuery(lQueryString.toString()); ............

INSERT INTO EMPLOYEE_HISTORY (emp_status, 
           createdBy, 
           releasedate, 
           year) 
    SELECT CASE n.emp_Status WHEN 0 THEN 'Draft' ELSE 'Final' END, 
      m.createdBy, 
      m.releasedate, 
      m.year 
    FROM EMPLOYEE m, (SELECT COUNT (1) EMPLOYEE_HISTORY b,EMPLOYEE a where a.emplid=b.emplid and a.year=b.year and b.year=2012 and a.doc_id='XYZ') n 
    where a.doc_id='xyz' 

getting following exception,I guess it because of below statement in query 
(SELECT COUNT (1) EMPLOYEE_HISTORY b,EMPLOYEE a where a.emplid=b.emplid and a.year=b.year and b.year=2012 and a.doc_id='XYZ') n 


org.hibernate.hql.ast.QuerySyntaxException: unexpected token: (near line 1, column 374 
INSERT INTO EMPLOYEE_HISTORY (emp_status, 
           createdBy, 
           releasedate, 
           year) 
    SELECT CASE n.emp_Status WHEN 0 THEN 'Draft' ELSE 'Final' END, 
      m.createdBy, 
      m.releasedate, 
      m.year 
    FROM EMPLOYEE m, (SELECT COUNT (1) EMPLOYEE_HISTORY b,EMPLOYEE a where a.emplid=b.emplid and a.year=b.year and b.year=2012 and a.doc_id='XYZ') n 
    where a.doc_id='xyz' 

예외에 대해 특정 쿼리를 최대 절전 모드로 만들려고 어떤 제안/입력.

답변

1

HQL 대신 SQL을 Session.createQuery (...) 메소드에 전달하는 것처럼 보입니다.

참조 : 예를 들어 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html#objectstate-querying-executing

에서 : (EmployeeHistory 같은)

INSERT INTO EMPLOYEE_HISTORY (...) 

'EMPLOYEE_HISTORY'해야 엔티티 클래스의 이름이 아닌 테이블 이름.

select mother from Cat as cat join cat.mother as mother where cat.name = ? 
: 당신은 당신이 여기

where a.emplid=b.emplid and ... 

할 위의 URL에서 예를 살펴처럼, IDS에서 가입 암시 방지 협회를 통해 갈 당신의 엔티티에 정의 된 참조를 사용할 수 있습니다 HQL에서 또한