TypedQuery não retorna resultado

2 respostas Resolvido
adautodasilvalima

Por favor poderiam me ajudar nesta query.
Estou usando JPA com Hibernate. Eu copio a query gerada e jogo no Mysql Workbench o resultado é um endereço igual, mas debugando no eclipse ela não está retornando nada, Passa direto pelo if, será que está com erro:

Chamo a query assim no bean:

if (enderecos.comDadosIguais(endereco) != null){

context.addMessage(null, new FacesMessage(Este endereço já está cadastrado na base!));

}else{

this.enderecos.guardar(endereco);

}

No repositório ela está assim:

public Endereco comDadosIguais(Endereco endereco) {
         TypedQuery<Endereco> query = manager.createQuery("select e from Endereco e "
    							 + "where upper(e.tipoLogradouro) = upper(:tipoLogradouro)"
    							 + " and upper(e.logradouro) = upper(:logradouro)"
    							 + " and e.numero = :numero"
    							 + " and upper(e.complemento) = upper(:complemento)"
    							 + " and e.cep = :cep", Endereco.class);
    													 
  	query.setParameter("tipoLogradouro", endereco.getTipoLogradouro());
    	query.setParameter("logradouro", endereco.getLogradouro());
    	query.setParameter("numero", endereco.getNumero());
    	query.setParameter("complemento", endereco.getComplemento());
    	query.setParameter("cep", endereco.getCep());
    		
    	try{
    		return query.getSingleResult();
    	}catch (NoResultException nre){
    		return null;
    	}	
    		
    }

2 Respostas

Lucas_Camara

Difícil encontrar o erro sem executar o código. Mas uma dica que posso dá e você tentar alterar sua query para fazer um count e retornar um boolean. Se o count retornar 0 (zero), significa que não há um endereço com dados iguais já cadastrado no banco.

adautodasilvalima
Solucao aceita

(RESOLVIDO)
Valeu pela dica!
Na tentativa e erro eu transferi o JPQL para minha entidade criando um @NamedQuery. Após ter colocado a Query na Entidade, acabou acusando um erro na linha: where upper(e.tipoLogradouro) = upper(:tipoLogradouro).
O e.tipoLogradouro é um enum e estava conflitando com o UPPER, retirei a claúsula, voltei o JPQL para meu repositorio e funcionou: where e.tipoLogradouro = :tipoLogradouro.
O chato é que o erro não é nada intuitivo, aliás nem erro estava dando, acho que por causa do try catch.
Obrigado, sua dica serve para testar qualquer JPQL.

Criado 23 de setembro de 2017
Ultima resposta 23 de set. de 2017
Respostas 2
Participantes 2