Tenho um progama que roda web e funciona normal sem o distinct mas quando coloco o distinct na query o progama retorna o erro java.lang.String cannot be cast to VO.Usuario
O metodo no dao com o distinct
public List<Usuario> listarVara() {
Query dynaQuery = getConexao().createQuery("SELECT DISTINCT (u.vara) FROM Usuario u");
return dynaQuery.getResultList();
}
public class UsuarioMB {
private Usuario usuario;
private List<Usuario> usuarios;
private List<SelectItem> selectItems;
/** Creates a new instance of UsuarioMB */
public UsuarioMB(){
this.usuario=new Usuario();
fillSelectItems();
}
public Usuario getUsuario() {
return usuario;
}
public List<Usuario> getUsuarios() {
return usuarios;
}
public List<SelectItem> getSelectItems() {
return selectItems;
}
public void setSelectItems(List<SelectItem> selectItems) {
this.selectItems = selectItems;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String excluir() {
UsuarioDAO uDAO = new UsuarioDAO();
try {
uDAO.deletar(usuario);
JSFUtil.setaMensagemInfo("Exclusão efetuada com sucesso");
// listar();
} catch (Exception ex) {
JSFUtil.setaMensagemInfo("Erro na exclusão: " + ex.getMessage());
}
return null;
}
public String limpar() {
usuario = new Usuario();
return null;
}
public String listar(){
UsuarioDAO uDAO = new UsuarioDAO();
usuarios=uDAO.listar();
uDAO.getConexao().close();
return "listar";
}
public String buscar(){
return "buscar";
}
public String cadastrar(){
UsuarioDAO uDAO=new UsuarioDAO();
if (usuario.getNomeUsuario().equals(""))
{
usuario.setNomeUsuario(null);
}
try
{
uDAO.inserirEditar(usuario);
limpar();
JSFUtil.setaMensagemInfo("Cadastro/Edição efetuado com sucesso!");
uDAO.getConexao().close();
}
catch (Exception e) {
JSFUtil.setaMensagemError("Erro no cadastro: "+e.getMessage());
uDAO.getConexao().getTransaction().rollback();
}
return null;
}
public String entrar(){
return "entrar";
}
private void fillSelectItems() {
UsuarioDAO uDAO = new UsuarioDAO();
selectItems = new ArrayList<SelectItem>();
selectItems.add(new SelectItem(null, "[SELECIONE]"));
for (Usuario u : uDAO.listarVara()) {
selectItems.add(new SelectItem(u.getVara(),u.getVara()));
}
}
}
A exception [quote]
javax.servlet.ServletException: Cant instantiate class: MB.UsuarioMB… java.lang.String cannot be cast to VO.Usuario
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)[/quote]
A stacktrace completa …
[list]08/08/2012 16:17:52 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/SIAP] threw exception [Cant instantiate class: MB.UsuarioMB… java.lang.String cannot be cast to VO.Usuario] with root cause
java.lang.ClassCastException: java.lang.String cannot be cast to VO.Usuario
at MB.UsuarioMB.fillSelectItems(UsuarioMB.java:127)
at MB.UsuarioMB.(UsuarioMB.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:277)
at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:546)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
at org.apache.el.parser.AstValue.getValue(AstValue.java:147)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:106)
at javax.faces.component.UISelectItems.getValue(UISelectItems.java:130)
at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:323)
at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:675)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:793)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:896)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
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:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
[/list]
Como fazer o distinct funcionar ?
Utilizo jpa 1.0 com jsf 1.2 …
A explicação da página http://www.objectdb.com/java/jpa/query/jpql/select#SELECT_DISTINCT_ não me ajudou pois montei igual e não rodou … será que alguem pode ajudar ?