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