2014-10-13 2 views
1

이 질문에 대한 답변이 제공됩니다.쿼리로 최대 절전 그룹

String sql = "select d.arc_alrt_cde, d.alrt_desc, count(d.arc_alrt_cde) " + 
"from arc_alrt a, arc_alrt_def d " + 
"where d.arc_alrt_cde = a.alrt_cde " + 
"and (a.stat_cde = 'OPEN' or a.stat_cde = 'RE-OPENED') " + 
"group by d.arc_alrt_cde, d.alrt_desc "+ 
"order by count(d.arc_alrt_cde) desc" 
println sql 
Query query = session.createQuery(sql); 

인쇄 SQL

sql = select d.arc_alrt_cde, d.alrt_desc, count(d.arc_alrt_cde) from arc_alrt a, arc_alrt_def d where d.arc_alrt_cde = a.alrt_cde and (a.stat_cde = 'OPEN' or a.stat_cde = 'RE-OPENED') group by d.arc_alrt_cde, d.alrt_desc order by count(d.arc_alrt_cde) desc 

다음과 같은 오류를 얻기. .. 작동하지 않습니다 또한 절에서 재판 ..

Error: 
java.lang.IllegalArgumentException: node to traverse cannot be null! 
    at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:64) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:300) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) 

답변

0

당신은 count 필드와 같은 count(d.arc_alrt_cde) as countOfXXX 하고 또한 당신의 개체가 해당 쿼리에 정렬되어야합니다 이름을 또는 당신은 모든 것을 count 필드를 제거해야합니다. 당신이 사용해야하므로, SQL 쿼리가 아닌 HQL 하나

1

:

최대 절전 모드는 HQL 쿼리를 기대하지만, 대신에 SQL 쿼리를 받기 때문에
SQLQuery query = session.createSQLQuery(sql); 

당신이있어 그 예외가 발생합니다.

0

개체 속성을 사용하도록 변경하여 작동했습니다. 귀하의 의견을 보내 주셔서 감사합니다.

String sql = "select alert.alertCode, def.alertDesc, count(alert.alertCode) " + 
       "from ArcAlert as alert, ArcAlertDef as def " + 
       "where alert.alertCode = def.alertCode " + 
       "and alert.status in ('OPEN', 'RE-OPENED') " + 
       "and alert.assignedTo = '"+assignedTo+"' " + 
       "group by alert.alertCode, def.alertDesc " + 
       "order by count(alert.alertCode) desc" 

쿼리 쿼리 = session.createQuery (sql); lst = query.list()

관련 문제