2010-10-06 16 views
2

I ont les suivantes HQL (La Query Language Hibernate) requête (qui est exécuté lors de la connexion oracle db) pour récupérer une somme agrégée, sur la base de moispasser un paramètre à sélectionner le cas avec le groupe de dans HQL

select sum(doc._masskg), 
    case when (month(doc._date) = month(:m)) then 'NOW' else 'BEFORE' 
from Document doc 
    where month(doc._date) <= month(:m) 
group by 
    case when (month(doc._date) = month(:m)) then 'NOW' else 'BEFORE' end 

cependant, le moteur d'exécution que je reçois exception Oracle PAS UN GROUPE pAR EXPRESSION

si je remplace : m avec sysdate, la requête fonctionne. Comment réécrire la requête si m: est Date?

Répondre

0

Donc, j'ai fini par remplacer le paramètre avec une valeur réelle:

String hql = "select sum(doc._masskg), "+ 
" case when (month(doc._date) = month(%1$s)) then 'NOW' else 'BEFORE' "+ 
"from Document doc "+ 
" where month(doc._date) <= month(%1$s) "+ 
"group by "+ 
" case when (month(doc._date) = month(%1$s)) then 'NOW' else 'BEFORE' end"; 

Iterator i = session.createQuery(String.format(HQL, "to_date('09.10.2011', 'DD.MM.YYYY')")) 
       .iterate();