Boa tarde pessoal.
To com um problema em uma consulta Hql.
select sum(distinct cliente.numSal) from Cliente cliente where
cliente.id>1
Está consulta dá uma exceção Unexpected token: distinct.
Eu tiro o DISTINCT e funciona, e quando tiro o SUM e coloco o COUNT funciona tbm.
Eu uso o hibernate 3.1
Alguém tem alguma ideia?
Abraços.
Esse erro dá somente com o hibernate ou ocorre quando vc executa a query sql no banco mesmo
kra sua consulta está errada… tipow…
vc tem que colocar o distinct fora do sum
vc tah usando que banco?
em mysql a consulta fica assim
select DISTINCT sum(teste.valor) from teste;
espero ter ajudado…
vlws
mario,
vc pode fazer o distinct usando criteria assim:
Criteria criteria = session.createCriteria( Cliente.class );
criteria.setProjection( Projections.distinct( Projections.property( "numSal" ) ) );
por hql deve ficar
Este erro dá no hibernate, ele nem gera o sql para enviar pro banco.
[quote=gzofera]kra sua consulta está errada… tipow…
vc tem que colocar o distinct fora do sum
vc tah usando que banco?
em mysql a consulta fica assim
select DISTINCT sum(teste.valor) from teste;
espero ter ajudado…
vlws[/quote]
Eu estou usando banco Oracle.
A opção de colocar o distinct dentro do sum eu peguei na documentação do hql:
http://www.developer.com/java/ent/print.php/10933_3322131_2
trecho da documentação:
count( [ distinct | all ] object | object.property )
count(*) (equivalent to count(all ...), counts null values also)
sum ( [ distinct | all ] object.property)
avg( [ distinct | all ] object.property)
max( [ distinct | all ] object.property)
min( [ distinct | all ] object.property)
E rodei uma consulta direto no banco utilizando sum(distinct) e funcionou.
Não sei porque o hibernate tá gerando este erro se na documentação eles dão suporte a este tipo de consulta.
[quote=Anderson Leite]mario,
vc pode fazer o distinct usando criteria assim:
Criteria criteria = session.createCriteria( Cliente.class );
criteria.setProjection( Projections.distinct( Projections.property( "numSal" ) ) );
por hql deve ficar
[/quote]
A opção de colocar o distinct dentro do sum eu peguei na documentação do hql:
trecho da documentação:
count( [ distinct | all ] object | object.property )
count(*) (equivalent to count(all …), counts null values also)
sum ( [ distinct | all ] object.property)
avg( [ distinct | all ] object.property)
max( [ distinct | all ] object.property)
min( [ distinct | all ] object.property)
E rodei uma consulta direto no banco utilizando sum(distinct) e funcionou.