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