[RES]org.hibernate.QueryParameterException: could not locate named parameter [unidadeParametro]

11 respostas
A

Está dando esse erro:
na minha pagina HTML:

org.hibernate.QueryParameterException: could not locate named parameter [unidadeParametro]

e minha criteria ta assim:

public List<BalancoLinkUmjAux> buscarGraficoUmjLink(String unidadeBusca) {
        Session session;

        if (em.getDelegate() instanceof EntityManagerImpl) {
            EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
            session = entityManagerImpl.getSession();
        } else {
            session = (Session) em.getDelegate();
        }
        
        String sql;
        sql = "select count(OCORRENCIALINK.ID_OCORRENCIALINK) as quantidade, OCORRENCIALINK.ID_UMJ as umj, "
         + "EXTRACT(MONTH FROM OCORRENCIA.DATAEXECUCAO) as mes"
         + "FROM OCORRENCIA "
         + "JOIN OCORRENCIALINK ON OCORRENCIA.ID_OCORRENCIALINK = OCORRENCIALINK.ID_OCORRENCIALINK "
         + "JOIN UMJ ON OCORRENCIALINK.ID_UMJ = UMJ.ID_UMJ "
         + "JOIN UNIDADE ON OCORRENCIA.ID_UNIDADE = UNIDADE.ID_UNIDADE "
         + "WHERE OCORRENCIA.STATUSOCORRENCIA =3 "
         + "AND UNIDADE.UNIDADE = :unidadeParametro"
         + "AND OCORRENCIA.DATAEXECUCAO IS NOT NULL "
         + "AND OCORRENCIALINK.ID_UMJ IS NOT NULL  "
         + "GROUP BY OCORRENCIALINK.ID_UMJ ";
      SQLQuery query = session.createSQLQuery(sql);
      query.setParameter("unidadeParametro",unidadeBusca);
      query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
      query.setResultTransformer(Transformers.aliasToBean(BalancoLinkUmjAux.class)).list();
      List results = query.list();
        return results;
        
    }

eu não to conseguindo colocar a variavel unidadeBusca para o parametro unidadeParamentro para colocar no meu SQL, ele fala que não foi possivel localizar.
Já tentei, mais não estou conseguindo alguem pode me ajudar??

11 Respostas

D

Qual a diferença da linha do meio em relação à primeira e à última?

+ "WHERE OCORRENCIA.STATUSOCORRENCIA =3 "  
         + "AND UNIDADE.UNIDADE = :unidadeParametro"  
         + "AND OCORRENCIA.DATAEXECUCAO IS NOT NULL "

Veja bem, existe uma pequena diferença e que está causando todo este transtorno.

A

Vamos lá, não entendi muito bem o que vocês quis dizer

+ "WHERE OCORRENCIA.STATUSOCORRENCIA =3 "    
        + "AND UNIDADE.UNIDADE = :unidadeParametro"    
        + "AND OCORRENCIA.DATAEXECUCAO IS NOT NULL "

where faz uma condição me dizendo que o status da minha ocorrencia tem que ser = a 3
a linha do meio eu pega a unidade e a descrição, o nome dessa unidade, que deve ser comparado com o nome da unidadeBusca, unidadeParametro que esta vindo como parametro, e a ultima linha é que a data de execução não pode ser nula, é obrigatório ter alguma data la.

Eu ainda não consegui ver o que esta erro, me ajuda, creio que só estou com esse problema para resolver.

A

AH! ta de sacanagem que é o espaço? vo testar depois posto o que deu.

A

era um simples espaço, e pensar que perdi 2 dias nisso.

Muito obrigado drsmachado.

D

alextr:
era um simples espaço, e pensar que perdi 2 dias nisso.

Muito obrigado drsmachado.


Para evitar problemas assim, eu costumo criar minhas queries e afins usando a seguinte formatação:

String hql = "SELECT ... \n" + 
"FROM ...\n" + 
"WHERE ...\n";

Desta forma, com a quebra de linha, nunca existirá problemas com espaço.

A

cara to quase la, estou com esse erro agora:

java.lang.ClassCastException: java.util.HashMap cannot be cast to br.com.rpctv.siseng.entidade.BalancoLinkUmjAux

sabe me dizer o porque dele?

D

alextr:
cara to quase la, estou com esse erro agora:

java.lang.ClassCastException: java.util.HashMap cannot be cast to br.com.rpctv.siseng.entidade.BalancoLinkUmjAux

sabe me dizer o porque dele?

Provavelmente seja por isso

query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);  
 query.setResultTransformer(Transformers.aliasToBean(BalancoLinkUmjAux.class)).list();
A

mudo o erro agora ta assim:

org.hibernate.PropertyNotFoundException: Could not find setter for QUANTIDADE on class br.com.rpctv.siseng.entidade.BalancoLinkUmjAux
E

Na sua classe que tem a variavel quantidade, tem o setQuantidade?
Tem que ter lá um public void setQuantidade, ou private, ai basta mapear a variavel com access=“field”

A

Vou ver mais tem o private e os get e seters só não tem o acess=field

A

Nunca mexi com fields, dei uma olhada no google, mais alguma ideia de como implementar isso no meu código?

Criado 13 de novembro de 2013
Ultima resposta 18 de nov. de 2013
Respostas 11
Participantes 3