Parametro no HQL

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

[code] 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);[/code]

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.

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

a variavel ras está vindo com qual valor?

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

[quote=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

[code] 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);[/code]

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.[/quote]

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 ??

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.

[quote=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.

[/quote]

é simples então amigo


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

ai depois

queryEmail.setParameter("ras", ras); 

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 ) " + " ");

[quote=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 ) " + " "); [/quote]

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 ??

[quote=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 ) " + " "); [/quote]

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

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

Vlw

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.

Não deu certo, fiz o seguinte:

[code] 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();[/code]

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)

[quote=maugloju]Não deu certo, fiz o seguinte:

[code] 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();[/code]

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)[/quote]

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 !.

aí imprimi normal

510154
503683

fiz o seguinte e deu o mesmo erro

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

[quote=maugloju]aí imprimi normal

510154
503683

[/quote]

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 

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

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 ??

aí vai o codigo todo

[quote]
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();[/quote]

Desculpe o certo é

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

List ras2 = new ArrayList();

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 = queryEmail.list();[/code]