[RESOLVIDO] Pegar resultado da Query + Vraptor

12 respostas
david.cs20
Tenho uma query a qual busca varios dados em uma tabela. Gostaria que esses dados fossem para uma list ou arraylist. Segue codigo abaixo:
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 ;
	}

12 Respostas

Lucas_Cavalcanti

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();
david.cs20

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

Lucas_Cavalcanti

tenta trocar o d.id in (:idList) por apenas d in (:idList)

david.cs20

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 ( ? , ? , ? , ? )

Lucas_Cavalcanti

os dispositivos que vc passou tem o id preenchido?

esses ids existem no banco?

david.cs20

Sim o array sai com os id todos preenchidos.
E eles existem no banco sim pois eu pego eles de uma listagem.

Lucas_Cavalcanti

esse método está aonde? num DAO? ou no Controller? quem está chamando esse método?

david.cs20

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(); }

Lucas_Cavalcanti

vc chamou o método mas não fez nada com o resultado :wink:

vc precisa jogar no result:

List<Dispositivo> dispositivos = dao.buscarResultado(session, dispositivo);  
result.include("dispositivos", dispositivos);

e na jsp vc acessa com ${dispositivos}

david.cs20

Fiz da seguinte maneira e funcionou:

@SuppressWarnings("unchecked") public List&lt;Dispositivo&gt; buscarResultado(Session session, ArrayList&lt;Dispositivo&gt; dispositivo) { List&lt;Dispositivo&gt; lista = new ArrayList&lt;Dispositivo&gt;(); 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 !!!

j0nny

david.cs20:
Fiz da seguinte maneira e funcionou:

@SuppressWarnings("unchecked") public List&lt;Dispositivo&gt; buscarResultado(Session session, ArrayList&lt;Dispositivo&gt; dispositivo) { List&lt;Dispositivo&gt; lista = new ArrayList&lt;Dispositivo&gt;(); 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&lt;Dispositivo&gt; buscarResultado(Session session, ArrayList&lt;Dispositivo&gt; dispositivo) {
		List&lt;Dispositivo&gt;  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.

david.cs20

Valew j0nny !
Segui a sua sugestão muito obrigado !!!

Criado 20 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 12
Participantes 3