oi pessoal,
eu estou fazendo uma consulta no banco (a principio era para ser simples), mas o que eu coloco em hql fica muito estranho no sql.
Quero consultar um cliente que esteja com todos os lancamentos pagos e o cliente precisa estar na condição de tomador de serviço.
Meu hql:StringBuilder hql = new StringBuilder("select l.cliente from Lancamento l");
hql.append(" join l.cliente c ");
hql.append(" join c.tomador t ");
hql.append("where t.codigo is not null ");
hql.append("and (l.valorPago > '0' or l.valorPago >= L.valorDebito) ");
hql.append("GROUP BY l.cliente");
Query query = getEntityManager().createQuery(hql.toString());
return query.getResultList();
a ideia do hql é trazer todos os clientes que sejam tomador e não possuem debito.
mas ele me gera um sql muito estranho e que dá erro.select
cliente3_.cliente_id as cliente1_15_,
cliente3_.cliente_codigo as cliente2_15_,
cliente3_.cliente_data_nascimento as cliente3_15_,
cliente3_.cliente_ativo as cliente4_15_,
cliente3_.cliente_capital_social as cliente5_15_,
cliente3_.cliente_celular as cliente6_15_,
cliente3_.cliente_cnh_categoria as cliente7_15_,
cliente3_.cliente_cnh_numero as cliente8_15_,
//varios outros campos
from
cadastro.lancamento lancamento0_
inner join
cadastro.cliente cliente1_
on lancamento0_.cliente_codigo=cliente1_.cliente_id
inner join
cadastro.tomador tomador2_
on cliente1_.cliente_id=tomador2_.cliente_id
inner join
cadastro.cliente cliente3_
on lancamento0_.cliente_codigo=cliente3_.cliente_id cross
join
cadastro.cliente cliente4_
where
lancamento0_.cliente_codigo=cliente4_.cliente_id
and (
cliente4_.cliente_id is not null
)
and (
lancamento0_.valor_pago>'0.0'
or lancamento0_.valor_pago>=lancamento0_.valor_debito
)
group by
lancamento0_.cliente_codigo
são gerados 4 inner join com a entidade cliente
E ainda da erro, porque no group by, ele chama o cliente de lancamento e no select ele busca direto de cliente.
ERRO: coluna "cliente3_.cliente_id" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação
o que tem de errado no meu hql? :shock:
pq ele gera tanto join com a mesma tabela?