Query dinamica - could not locate named parameter [el1] - [RESOLVIDO]

6 respostas
D

Galera, estou fazendo uma query dinamica, só que estou recebendo o seguinte erro:

could not locate named parameter [el1]

public List<CorretorPessoa> listaCorretores() {
		List<CorretorPessoa> listaCorretores = null;
		List<String> queryDinamica = new ArrayList<String>();
			
			if(nomeCorretor != null){
				queryDinamica.add("result.pessoa.nomePessoa like '%#{nomeCorretor}%'"); // AQUI ELE É A LINHA PROBLEMÁTICA
			}
			if(creciCorretor != null && creciCorretor.equalsIgnoreCase("")){
				queryDinamica.add("result.corretorCreci = #{creciCorretor}");
			}
			if(classificacaoSelecionada != null){
				queryDinamica.add("result.classificacao = #{classificacaoSelecionada}");
				this.setValor(true);
			}			
			try {
				EntityQuery<CorretorPessoa> entityQuery = new EntityQuery<CorretorPessoa>();
				entityQuery.setEntityManager(entityManager);
				entityQuery.setEjbql(" FROM CorretorPessoa result");
				entityQuery.setRestrictionExpressionStrings(queryDinamica);
				
				listaCorretores = entityQuery.getResultList();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return listaCorretores;
	}

Usando somente o like sem ’ e % funciona, só que quando eu coloco dá o erro mencionado acima.

6 Respostas

Hebert_Coelho

Ao invés de passar o valor em formato EL (#{nomeCorretor}), você não teria que passar a String?

D

Já tentei passar uma String, só que dá o seguinte erro:
there should be exactly one value binding in a restriction: org.jboss.seam.core.Expressions$1@425c28

passei dessa forma:

if(nomeCorretor != null){ queryDinamica.add("result.pessoa.nomePessoa like '%"+nomeCorretor+"}%'"); }

Hebert_Coelho

Vc deixou uma chave: ‘%"+nomeCorretor+"}%’

D

Ops, foi erro meu na hora de digitar aki. Mas mesmo assim o erro continua:

if(nomeCorretor != null){  
            queryDinamica.add("result.pessoa.nomePessoa like '%"+nomeCorretor+"%'");  
        }

ERRO:
there should be exactly one value binding in a restriction: org.jboss.seam.core.Expressions$1@425c28

D

Consegui fazer funcionar.
if(nomeProduto != null){ queryDinamica.add("lower(produto.nomeProduto) like concat(lower(#{nomeProduto}),'%')"); }
Só que ele me retorna tudo o que começa com o que é passado. Eu queria que ele me retorna-se tudo que tiver o que foi passado.
Por exemplo:

Bombom recheado de amendoin
Bombom recheado de coco
Bombom recheado de morango
…

Quando digito Bombom ele faz certinho. Traz todos os bomboms, só que quando digito recheado ele não traz nada. O que está faltando?

D

Ops…
Consegui resolver

if(nomeProduto != null){ queryDinamica.add("lower(produto.nomeProduto) like concat('%',lower(#{nomeProduto}),'%')"); }

Não tinha visto que estava faltando o ‘%’ do lado esquerdo do lower.

Criado 19 de janeiro de 2012
Ultima resposta 19 de jan. de 2012
Respostas 6
Participantes 2