2014-10-13 3 views
1

Пожалуйста, помогите мне разобраться, в чем проблема с этим запросом.Hibernate Group По запросу

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 поле вообще.

1

Это SQL-запрос не HQL один, так что вы должны использовать:

SQLQuery query = session.createSQLQuery(sql); 

Это исключение тебя бросают, потому что Hibernate ожидает запрос HQL, но получает запрос 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()

Смежные вопросы