public List<Dispositivo> buscarResultado(Session session, List<Dispositivo> dispositivo){
Query query = session.createSQLQuery("SELECT `id`, `data_aquisicao`, `fabricante`, `imei_serial`, `modelo`, `patrimonio` FROM `Dispositivo` WHERE id in (:idList)").addEntity(Dispositivo.class);
query.setParameterList("idList", dispositivo);
int rowCount = query.executeUpdate();
System.out.println("Rows affected: " + rowCount);
return dispositivo ;
}
[RESOLVIDO] Pegar resultado da Query + Vraptor
12 Respostas
pq vc não usa uma query normal do hibernate?
tipo:
return session.createQuery("from Dispositivo d where d.id in (:idList)").setParameterList("idList", dispositivo).list();
Tentei fazer dessa maneira ai lucas mais da o seguinte erro
Caused by: java.lang.ClassCastException: ws.futuranet.modelo.Dispositivo cannot be cast to java.lang.Long
at org.hibernate.type.LongType.set(LongType.java:65)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:61)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at ws.futuranet.dao.DispositivoDao.buscarResultado(DispositivoDao.java:67)
at ws.futuranet.dao.DispositivoDao$$FastClassByCGLIB$$69edf17f.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:617)
at ws.futuranet.dao.DispositivoDao$$EnhancerByCGLIB$$ca1dc7f7.buscarResultado(<generated>)
at ws.futuranet.controller.DispositivoController.busca(DispositivoController.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
... 53 more
tenta trocar o d.id in (:idList) por apenas d in (:idList)
Então lucas ele faz a consulta corretamente agora porem nao retorna nada. Apenas faz a consulta o resultado dela na tela de exibição fica vazio.
public List<Dispositivo> buscarResultado(Session session, ArrayList<Dispositivo> dispositivo) {
return session.createQuery("from Dispositivo d where d in (:idList)").setParameterList("idList", dispositivo).list();
}
Como esta imprimindo a consulta no console :
Hibernate:
select
dispositiv0_.id as id1_,
dispositiv0_.data_aquisicao as data2_1_,
dispositiv0_.fabricante as fabricante1_,
dispositiv0_.imei_serial as imei4_1_,
dispositiv0_.modelo as modelo1_,
dispositiv0_.patrimonio as patrimonio1_
from
Dispositivo dispositiv0_
where
dispositiv0_.id in (
? , ? , ? , ?
)
os dispositivos que vc passou tem o id preenchido?
esses ids existem no banco?
Sim o array sai com os id todos preenchidos.
E eles existem no banco sim pois eu pego eles de uma listagem.
esse método está aonde? num DAO? ou no Controller? quem está chamando esse método?
E o seguinte eu tenho um form que manda uma lista de de id para o controller:
@Get
@Post
public void busca(ArrayList<Dispositivo> dispositivo) {
dao.buscarResultado(session, dispositivo);
}
E o Controller vai para o DAO:
public List<Dispositivo> buscarResultado(Session session, ArrayList<Dispositivo> dispositivo) {
return session.createQuery("from Dispositivo d where d in (:idList)").setParameterList("idList", dispositivo).list();
}
vc chamou o método mas não fez nada com o resultado 
vc precisa jogar no result:
List<Dispositivo> dispositivos = dao.buscarResultado(session, dispositivo);
result.include("dispositivos", dispositivos);
e na jsp vc acessa com ${dispositivos}
Fiz da seguinte maneira e funcionou:
@SuppressWarnings("unchecked")
public List<Dispositivo> buscarResultado(Session session, ArrayList<Dispositivo> dispositivo) {
List<Dispositivo> lista = new ArrayList<Dispositivo>();
lista = session.createQuery("from Dispositivo d where d in (:idList)").setParameterList("idList", dispositivo).list();
return lista;
}
E na pagina importei a pagina lista e veio tudo certinho.
Valew lucas !!!
Fiz da seguinte maneira e funcionou:
@SuppressWarnings("unchecked") public List<Dispositivo> buscarResultado(Session session, ArrayList<Dispositivo> dispositivo) { List<Dispositivo> lista = new ArrayList<Dispositivo>(); lista = session.createQuery("from Dispositivo d where d in (:idList)").setParameterList("idList", dispositivo).list(); return lista; }E na pagina importei a pagina lista e veio tudo certinho.
Valew lucas !!!
Só uma dica, faça assim:
@SuppressWarnings("unchecked")
public List<Dispositivo> buscarResultado(Session session, ArrayList<Dispositivo> dispositivo) {
List<Dispositivo> lista = session.createQuery("from Dispositivo d where d in (:idList)").setParameterList("idList", dispositivo).list();
return lista;
}
Reparou a diferença? Vc evita instanciar um ArrayList sem usá-lo.
Valew j0nny !
Segui a sua sugestão muito obrigado !!!