Distinct no hibernate

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.