Parametro no HQL

20 respostas
M

Olá

Preciso de uma ajudinha urgente, estou tentando passa uma String como parametro para uma HQL, a String vem de um form, e está preenchida corretamente.

porem quando envio via getParameter o HQL não retorna nada

o código é este
String ras = request.getParameter("'510154','503681'");

            Query queryEmail = sessionEmail.createQuery(
                    " from Aluno aluno " +
                    " " +
                    " where aluno.ra in ( :ras ) " +
                    " ");

            queryEmail.setParameter("ras", ras.toString());

            List<Aluno> aluno = queryEmail.list();
            System.out.println(aluno);

onde ras são os numeros de matricula dos alunos.

Este HQL não está me retornando nada.

Se alguem puder me ajudar eu agradeço.

20 Respostas

I

‘510154’,‘503681’ é o nome do seu parâmetro? Como vc está setando esse parâmetro?

a variavel ras está vindo com qual valor?

M

o valor da variavel é ‘510154’,‘503681’

está vindo fe um form via post

ela vem assim

eu tentei facilitar a compreensão mas ficou pior

deculpe

a variavel vem carregada em ras com o valor ‘510154’,‘503681’

aí eu tenho que passar como parametro

O
maugloju:
Olá

Preciso de uma ajudinha urgente, estou tentando passa uma String como parametro para uma HQL, a String vem de um form, e está preenchida corretamente.

porem quando envio via getParameter o HQL não retorna nada

o código é este
String ras = request.getParameter("'510154','503681'");

            Query queryEmail = sessionEmail.createQuery(
                    " from Aluno aluno " +
                    " " +
                    " where aluno.ra in ( :ras ) " +
                    " ");

            queryEmail.setParameter("ras", ras.toString());

            List<Aluno> aluno = queryEmail.list();
            System.out.println(aluno);

onde ras são os numeros de matricula dos alunos.

Este HQL não está me retornando nada.

Se alguem puder me ajudar eu agradeço.

Amigo vc usou isso -> String ras = request.getParameter("'510154','503681'");

nao deve ser string neste caso usse uma Lista de Strings por exemplo um mesmo uma lista de Integer

List ras = new ArrayList();
ras.add(510154);
ras.add(503681);

ai depois

queryEmail.setParameter("ras", ras);

Entendeu ??

M

Obrigado pela atenção, mas a variavel ras é realmente uma String, que eu quero encaixar no HQL.

Eu coloquei um System.out.println(ras) para ver o valor que está chegando do form, e está certinho = ‘510154’,‘503681’

O campo é alfanumerico, por exemplo poderia ser “‘a510154’,‘b503681’”

já tentei dar um setString(ras) mas tb não deu certo.

O

maugloju:
Obrigado pela atenção, mas a variavel ras é realmente uma String, que eu quero encaixar no HQL.

Eu coloquei um System.out.println(ras) para ver o valor que está chegando do form, e está certinho = ‘510154’,‘503681’

O campo é alfanumerico, por exemplo poderia ser “‘a510154’,‘b503681’”

já tentei dar um setString(ras) mas tb não deu certo.

é simples então amigo

List<String> ras = new ArrayList<String>();
ras.add("510154");
ras.add("503681");

ai depois

queryEmail.setParameter("ras", ras);
M

Ok eu entendi, mas não é um arrayList, é uma String, as ‘’ e a , fazem parte do texto, náo é uma separação, o que eu preciso é colocar esta String no HQL

Query queryEmail = sessionEmail.createQuery( " from Aluno aluno " + " " + " where aluno.ra in ( :ras ) " + " ");

O

maugloju:
Ok eu entendi, mas não é um arrayList, é uma String, as ‘’ e a , fazem parte do texto, náo é uma separação, o que eu preciso é colocar esta String no HQL

Query queryEmail = sessionEmail.createQuery( " from Aluno aluno " + " " + " where aluno.ra in ( :ras ) " + " ");

Caro amigo esta faltando um estudo de JPA , se vc ver a documentacao do JPA quando se usa a clausula IN vc precisa passar sim um array list … se passar String com as aspas nunca vai funcionar

vc ao menos testou o que eu coloquei acima ??

O

maugloju:
Ok eu entendi, mas não é um arrayList, é uma String, as ‘’ e a , fazem parte do texto, náo é uma separação, o que eu preciso é colocar esta String no HQL

Query queryEmail = sessionEmail.createQuery( " from Aluno aluno " + " " + " where aluno.ra in ( :ras ) " + " ");

mesmo assim faltou a pergunta esta usando JPA ou Session do hibernate ???

M

Ok, agora caiu a ficha, desculpe a eiinsistência.

Vlw

O

testa e da um retorno ai !

Dei uma olhada na documentacao do Hibernate tanto o JPA quando Hibernato pardão usam listas como parametro quando usado IN no HQL.

M

Não deu certo, fiz o seguinte:

String rasTexto = request.getParameter("rasTexto");
            
            List<String> ras = new ArrayList<String>();
            ras.add(rasTexto);
            
            Query queryEmail = sessionEmail.createQuery(
                    " from AlunoMicrosiga alunoMicrosiga " +
                    " " +
                    " where alunoMicrosiga.ra in ( :ras ) " +
                    " ");

            queryEmail.setParameter("ras", ras);

            List<AlunoMicrosiga> alunoMicrosiga = queryEmail.list();

Quando eu mando imprimir ras, fica assim
[510154
503683]

mas está dando o seguinte erro

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
	org.hibernate.type.StringType.toString(StringType.java:44)
	org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
	org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
	org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
	org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
	org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
	org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
	org.hibernate.loader.Loader.doQuery(Loader.java:673)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	org.hibernate.loader.Loader.doList(Loader.java:2220)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	org.hibernate.loader.Loader.list(Loader.java:2099)
	org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
	org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
	org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	br.edu.unifeob.cobranca.controladores.servlets.RelatorioEmailCobrancaControl.processRequest(Unknown Source)
	br.edu.unifeob.cobranca.controladores.servlets.RelatorioEmailCobrancaControl.doPost(Unknown Source)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	br.edu.unifeob.cobranca.filtros.FiltroHibernate.doFilter(Unknown Source)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
O
maugloju:
Não deu certo, fiz o seguinte:
String rasTexto = request.getParameter("rasTexto");
            
            List<String> ras = new ArrayList<String>();
            ras.add(rasTexto);
            
            Query queryEmail = sessionEmail.createQuery(
                    " from AlunoMicrosiga alunoMicrosiga " +
                    " " +
                    " where alunoMicrosiga.ra in ( :ras ) " +
                    " ");

            queryEmail.setParameter("ras", ras);

            List<AlunoMicrosiga> alunoMicrosiga = queryEmail.list();

Quando eu mando imprimir ras, fica assim
[510154
503683]

mas está dando o seguinte erro

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
	org.hibernate.type.StringType.toString(StringType.java:44)
	org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
	org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
	org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
	org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
	org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
	org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
	org.hibernate.loader.Loader.doQuery(Loader.java:673)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	org.hibernate.loader.Loader.doList(Loader.java:2220)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	org.hibernate.loader.Loader.list(Loader.java:2099)
	org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
	org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
	org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	br.edu.unifeob.cobranca.controladores.servlets.RelatorioEmailCobrancaControl.processRequest(Unknown Source)
	br.edu.unifeob.cobranca.controladores.servlets.RelatorioEmailCobrancaControl.doPost(Unknown Source)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	br.edu.unifeob.cobranca.filtros.FiltroHibernate.doFilter(Unknown Source)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

E se vc manda imprimeir o rasTexto antes de colocar ele na lista o que ele imprime ???

veja que é necessario adicionar um a um a lista !.

M

aí imprimi normal

510154
503683

M

fiz o seguinte e deu o mesmo erro

List<String> ras = new ArrayList<String>();
        ras.add("510154");
        ras.add("503683");
O

maugloju:
aí imprimi normal

510154
503683

ai que esta o porem da coisa … veja só

vc deve preencher a lista de String um a um dos itens veja um exemplo

List<String> ras = new ArrayList<String>();  
ras.add("510154");  //primeiro valor
ras.add("503683"); //segundo valor
M

No console do Apache no net beans imprimi certinho mas quando vai pro HQL dá o erro

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String

O

uso esse procedimento e funciona certinho … muito estranho pode colocar mais codigos o da busca e tal para ficar melhor de ver a aplicação ou metodo completo ??

M

aí vai o codigo todo


String ras = request.getParameter(“ras”);
String[] rasTexto = ras.split(ras);

List<String> ras = new ArrayList<String>();
        
        for(int i =0 ; i < rasTexto.length; i++){
          ras.add(rasTexto[i]);  
        }
        
        System.out.println(ras); 
        System.out.println(rasTexto);
        Query queryEmail = sessionEmail.createQuery(
                " from AlunoMicrosiga alunoMicrosiga " +
                " " +
                " where alunoMicrosiga.ra in ( :ras ) " +
                " ");

        queryEmail.setParameter("ras", ras);

        List<AlunoMicrosiga> alunoMicrosiga = queryEmail.list();</blockquote>
M

Desculpe o certo é

String ras = request.getParameter("ras"); 
String[] rasTexto = ras.split(ras); 


List<String> ras2 = new ArrayList<String>(); 

for(int i =0 ; i < rasTexto.length; i++){ 
ras2.add(rasTexto[i]); 
} 

System.out.println(ras); 
System.out.println(rasTexto); 
Query queryEmail = sessionEmail.createQuery( 
" from AlunoMicrosiga alunoMicrosiga " + 
" " + 
" where alunoMicrosiga.ra in ( :ras ) " + 
" "); 

queryEmail.setParameter("ras", ras); 

List<AlunoMicrosiga> alunoMicrosiga = queryEmail.list();
M

Para quem possa interessar, resolvi o problema de outra maneira, segue o código abaixo:

String ras = request.getParameter("ras");

            StringTokenizer st = new StringTokenizer(ras, "-");

            while (st.hasMoreTokens()) {

                Query queryEmail = sessionEmail.createQuery(
                        " from Aluno aluno " +
                        " " +
                        " where aluno.ra in ( :ras ) " +
                        " ");
                queryEmail.setParameter("ras", st.nextToken());


                List<Aluno> aluno = queryEmail.list();

                //Aqui vai o código para enviar o e-mail de mala direta 
              }
Criado 30 de abril de 2009
Ultima resposta 4 de mai. de 2009
Respostas 20
Participantes 3