Converter Lista de Object [RESOLVIDO]

Feras,

estou fazendo uma consulta conforme abaixo mas a lista que esta me retornando e uma lista de Object e não uma lista de objeto Collection ai preciso fazer essa conversão como faço isso ?

aqui esta a lista que me retorna a query abaixo

[[Ljava.lang.Object;@b1b7fe, 
[Ljava.lang.Object;@1a6a8f4,
 [Ljava.lang.Object;@9e4acb, 
[Ljava.lang.Object;@4059d8,
 [Ljava.lang.Object;@ca9d11]
	@SuppressWarnings("unchecked")
	public Collection<Objeto1TO> consultarLista(String usuario) {
		Collection<Objeto1TO> listaResultado = new ArrayList<Objeto1TO>();
		try {
			Query query = em.createQuery("SELECT mi.coluna1, mi.coluna2 FROM Objeto1TO mi, Objeto2TO mp "+
					"       where mp.idColuna = mi.idColuna\n" + 
					"       and mp.valor = :valor order by mi.idColuna");
			query.setParameter("valor", "1234");
			listaResultado =  query.getResultList();			
		} catch (Exception e) {
			logger.error("Erro ao consultar " + e);
			e.printStackTrace();
		}
		return listaResultado;
	}

Amigo,

Isso acontece pelo simples fato de você não ter uma classe(entity) mapeada para o banco, você realiza a query e quer que ela seja de uma coleção de um VO/TO etc…

Mas a conversão é simples.


@SuppressWarnings("unchecked")  
public Collection<Objeto1TO> consultarLista(String usuario) {
  
    Collection<Objeto1TO> listaResultado = new ArrayList<Objeto1TO>();  
     
    List<Objeto1TO> listaMontadaTO = new ArrayList<Objeto1TO>();
    Objeto1TO objTO;  

    StringBuilder sqlbuilder = new StringBuilder();
    sqlBuilder.append("SELECT mi.coluna1, mi.coluna2 FROM Objeto1TO mi, Objeto2TO mp ");
    sqlBuilder.append("where mp.idColuna = mi.idColuna ");
    sqlBuilder.append(" and mp.valor = :valor ");
    sqlBuilder.append("order by mi.idColuna");

    try {  
        Query query = em.createQuery(sqlBuilder.toString());
        query.setParameter("valor", "1234");  
        listaResultado =  query.getResultList();

        for(Object obj : listaResultado){
            objTO = new Objeto1TO ();
            objTO.setCampo(obj)
        }
listaMontadaTO.add(objTO);               
    } catch (Exception e) {  
        logger.error("Erro ao consultar " + e);  
        e.printStackTrace();  
    }  
    return listaMontadaTO;  
}  

Ou se preferir pode usar um código mais antigo fazendo o uso do iterator.


Query query = emanager.createNativeQuery(sqlBuilder.toString());
			  query.setParameter("anoEdicao", anoEdicao);
		     
		     Iterator iterator = query.getResultList().iterator();
		     
		     while(iterator.hasNext()){
		    	 
		    	 Object[] obj = (Object[]) iterator.next();
		    	 
		    	 relSintVO = new RelatorioSinteticoVO();
		    	 
		    	 relSintVO.setNomeCategoria(obj[0].toString());
		    	 relSintVO.setSiglaUF(obj[1].toString());
		    	 relSintVO.setTotPratica((BigDecimal)obj[2]);
		    	 		    	 
		    	 listaRet.add(relSintVO);
		    	 
		     }

danillonc,

fiz um teste com os dois exemplos mas não seu certo irei postar as duas formas aqui com o método com os nomes corretos,

Exemplo 1

	@SuppressWarnings("rawtypes")
	public Collection<MenuItemTO> montarMenu(String usuario) {
		Collection<MenuItemTO> listaMenuItem = new ArrayList<MenuItemTO>();
		MenuItemTO menuItemTO = new MenuItemTO();
		try {
			Query query = em.createQuery("query");
	        Iterator iterator = query.getResultList().iterator();  
            
            while(iterator.hasNext()){  
                Object[] obj = (Object[]) iterator.next();  
                menuItemTO = new MenuItemTO();
                menuItemTO.setIdMenuItem((Integer)obj[0]);
                menuItemTO.setDescMenuItem(obj[1].toString());
                listaMenuItem.add(menuItemTO);  
            }
		} catch (Exception e) {
			logger.error("Erro ao consultar " + e);
			e.printStackTrace();
		}
		return listaMenuItem;
	}

Erro nesta linha

 Object[] obj = (Object[]) iterator.next();

Erro


java.lang.ClassCastException: br.com.getnet.retaguarda.menu.to.MenuItemTO cannot be cast to [Ljava.lang.Object;
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO.montarMenu(MenuImplDAO.java:66)
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO_4jn8kg_MenuDAOImpl.__WL_invoke(Unknown Source)
	at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:33)
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO_4jn8kg_MenuDAOImpl.montarMenu(Unknown Source)
	at br.com.getnet.retaguarda.menu.delegate.MenuDelegate.getMenuItems(MenuDelegate.java:457)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:780)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:529)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:134)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:183)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
	at com.sun.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:121)
	at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
	at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
	at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
	at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
	at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at br.com.getnet.retaguarda.filter.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:93)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)
	at java.security.AccessController.doPrivileged(Native Method)
	at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
	at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
	at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)
	at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)
	at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
	at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
	at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

Exemplo 2

Query

	@SuppressWarnings("unchecked")
	public Collection<MenuItemTO> montarMenu(String usuario) {
		Collection<MenuItemTO> listaMenuItem = new ArrayList<MenuItemTO>();
		MenuItemTO menuItemTO = new MenuItemTO();
		
		List<MenuItemTO> listaMontadaTO = new ArrayList<MenuItemTO>(); 
		try {
			Query query = em.createQuery("query");
			listaMenuItem =  query.getResultList();
			
	        for(Object obj : listaMenuItem){  
	        	menuItemTO = new MenuItemTO();
	        	menuItemTO.setIdMenuItem((Integer) obj);
	        	menuItemTO.setDescMenuItem((String) obj);
	        }  
	        listaMontadaTO.add(menuItemTO);
		} catch (Exception e) {
			logger.error("Erro ao consultar Sumarizacao " + e);
			e.printStackTrace();
		}
		return listaMenuItem;
	}
Erro nesta linha 
[code]
menuItemTO.setIdMenuItem((Integer) obj);

[/code]

erro

12:53:18.979 [[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'] ERROR br.com.getnet.retaguarda.login.dao.LoginImplDAO:74 - Erro ao consultar Sumarizacao java.lang.ClassCastException: br.com.getnet.retaguarda.menu.to.MenuItemTO cannot be cast to java.lang.Integer
java.lang.ClassCastException: br.com.getnet.retaguarda.menu.to.MenuItemTO cannot be cast to java.lang.Integer
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO.montarMenu(MenuImplDAO.java:69)
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO_4jn8kg_MenuDAOImpl.__WL_invoke(Unknown Source)
	at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:33)
	at br.com.getnet.retaguarda.menu.dao.MenuImplDAO_4jn8kg_MenuDAOImpl.montarMenu(Unknown Source)
	at br.com.getnet.retaguarda.menu.delegate.MenuDelegate.getMenuItems(MenuDelegate.java:457)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:780)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:529)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:134)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:183)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
	at com.sun.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:121)
	at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
	at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
	at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
	at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
	at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
	at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
	at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at br.com.getnet.retaguarda.filter.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:93)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)
	at java.security.AccessController.doPrivileged(Native Method)
	at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
	at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
	at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)
	at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)
	at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
	at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
	at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

Faça o seguinte teste, em vez de createQuery, faça um nativeQuery e veja o resultado.

Mesmo erro usando o createNativeQuery

Tente fazer o cast para seu VO diretamente sem ser pro tipo object.

No método alterei assim

	        for(MenuItemTO item : listaMenuItem){
	        	menuItemTO = new MenuItemTO();
	        	menuItemTO.setIdMenuItem(item.getIdMenuItem());
	        	menuItemTO.setDescMenuItem(item.getDescMenuItem());
				listaMontadaTO.add(menuItemTO);
	        }

esta exibindo assim

[br.com.getnet.retaguarda.menu.to.MenuItemTO@d8ab5406, br.com.getnet.retaguarda.menu.to.MenuItemTO@47a3e767, br.com.getnet.retaguarda.menu.to.MenuItemTO@6ae9eea1, br.com.getnet.retaguarda.menu.to.MenuItemTO@96c9ed76, br.com.getnet.retaguarda.menu.to.MenuItemTO@bccecaac]

danillonc,

resolvi o problema a exibição estava mostrando os objetos por eu não peguei os itens da lista que carreguei do banco,

Valeu pela ajuda

Legal cara.

O ideal seria postar a solução para os próximos que tiverem o mesmo problema puderem resolver. :wink: