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: :wink:](//www.guj.com.br/images/emoji/twitter/wink.png?v=5)