donny
Setembro 15, 2012, 9:34am
#1
Salve galera! Estou precisando de um help. Não estou conseguindo transformar o sql abaixo em hql:
select c.id, c.nome from Cliente c left join FuncionarioCliente fc on c.id=fc.cliente_id
where c.empresa_id=1
and c.status='ATIVO'
and fc.fim is null
and c.id not in(1,2,3);
Esse sql busca todos os Clientes que não existem em FuncionarioCliente.
E qual o erro que você está tendo?
donny
Setembro 15, 2012, 9:49am
#3
Ocorreram diversos erros. Atualmente estou usando sql nativo ao invés de hql. Segue o método abaixo:
@Override
public List<Cliente> listaClientesNaoAdicionados(Empresa empresa, List<Cliente> clientesAdicionados) {
List<Cliente> retorno = null;
StringBuilder sql = new StringBuilder();
sql.append(" select c.id, c.nome from Cliente c left join FuncionarioCliente fc on c.id=fc.cliente_id ");
sql.append(" where c.empresa_id = :empresa ");
sql.append(" and c.status = :status ");
sql.append(" and fc.fim is null ");
if (!clientesAdicionados.isEmpty()) {
sql.append(" nd c.id not in(:clientes) ");
}
Query query = getEntityManager().createNativeQuery(sql.toString());
query.setParameter("empresa", empresa.getId());
query.setParameter("status", Status.ATIVO);
if (!clientesAdicionados.isEmpty()) {
query.setParameter("clientes", clientesAdicionados);
}
List<Object[]> resp = query.getResultList();
if(resp!=null && resp.size()>0){
retorno = new ArrayList<Cliente>();
for(Object o[] : resp){
Cliente c = new Cliente();
c.setId(Long.parseLong(o[0].toString()));
c.setNome(o[1].toString());
retorno.add(c);
}
}
return retorno;
}
HQL/JPQL você aponta para a classe e não para as colunas diretamente.
Leia o post abaixo, ele irá te ajudar.
JPA Consultas e Dicas