Clausula having no HQL

4 respostas
tebosoftware

Boa tarde pessoal.

estou precisando montar um HQL onde exista uma condição de having sendo assim;

tem um objeto Documento e este tem um Set de Recebimentos.

Preciso que so traga os documentos onde a somatoria do campo valor dos objetos Recebimento seja = ao valor do documento.

em sql ficaria assim

select d.id, d.valor from documento d left join recebimento r on d.id = r.iddocumento group by d.id, d.valor having d.valor = sum(r.valor)

desde já agradeço

4 Respostas

Mero_Aprendiz

tebosoftware:
Boa tarde pessoal.

estou precisando montar um HQL onde exista uma condição de having sendo assim;

tem um objeto Documento e este tem um Set de Recebimentos.

Preciso que so traga os documentos onde a somatoria do campo valor dos objetos Recebimento seja = ao valor do documento.

em sql ficaria assim

select d.id, d.valor from documento d left join recebimento r on d.id = r.iddocumento group by d.id, d.valor having d.valor = sum(r.valor)

desde já agradeço

Olá.
Bem, na documentação do Hibernate tem uma referência a isso:
http://www.hibernate.org/hib_docs/nhibernate/html/queryhql.html
No sub-item 10.

[]'s
JL

tebosoftware

Valeu cara pela dica

vou dar uma olhada e testar aqui…

falow

tebosoftware

Bom analizando bem a documentação o melhor que eu consegui fazer foi assim:

select doc from Documento doc left join doc.recebimentos rec where doc.emissao between ? and ? group by doc.id, doc.descricao, doc.emissao, doc.vencimento, doc.valor having doc.valor > sum(rec.valor) or sum(rec.valor) is null order by doc.emissao, doc.vencimento

só que como visto acima, tive que listar no group by todos os campos da entidade Documento, sendo que no exemplo é mostrado assim:

select doc from Documento doc left join doc.recebimentos rec where doc.emissao between ? and ? group by doc having doc.valor > sum(rec.valor) or sum(rec.valor) is null order by doc.emissao, doc.vencimento

só que assim da erro no sql que o hibernate monta, pois ele coloca no group by somente o id do documento.

alguém podiria me ajudar nessa?

grato

tebosoftware

Bom como ninguém respondeu,
continuei a procurar na net e em algumas documentações e encontrei a seguinte forma para resolver o meu problema:

select doc from Documento doc where doc.emissao between ? and ? and (doc.recebimentos is empty or doc.valor > (select sum(rec.valor) from doc.recebimentos rec)) order by doc.emissao, doc.vencimento

desde já agradeço

Criado 17 de março de 2009
Ultima resposta 19 de mar. de 2009
Respostas 4
Participantes 2