Chamar StoredProcedure(Function do PostgreSQL) JSF2+JPA

Boa Noite,

estou em desenvolvimento web, tenho minha classe CRUD de persistencia e faz a chamada de StoredProcedure(Function) validarlogin com parametros de email e senha e me retorna int, estou com problemas de coersao java.lang.ClassCastException: java.lang.Integer cannot be cast to br.data.model.Usuario.

Náo sei se estou chamando corretamente como o codigo abaixo createNativeQuery…se alguem puder me ajudar abaixo codigo e erro.

public Object loggin(String email, String senha) {

EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();



return em.createNativeQuery("select validarLogin('" + email + "','" + senha + "')").getFirstResult();


//return em.createNamedQuery("Usuario.findByEmailSenha").
//setParameter("email", email).setParameter("senha", senha).getSingleResult();

/*
* @NamedQuery(name = "Usuario.findByEmailSenha", query = "SELECT t
* FROM Usuario u WHERE u.email = :email AND u.senha = :senha")})
*/
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
em.getTransaction().rollback();
return null;
} finally {
em.close();
}

}

ERRO

AVISO: #{loginBean.log()}: java.lang.ClassCastException: java.lang.Integer cannot be cast to br.data.model.Usuario  
javax.faces.FacesException: #{loginBean.log()}: java.lang.ClassCastException: java.lang.Integer cannot be cast to br.data.model.Usuario  
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)  
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)  
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)  
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)  
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)  
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)  
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)  
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)  
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)  
    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:224)  
    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:100)  
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)  
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)  
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)  
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)  
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)  
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)  
    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:662)  
Caused by: javax.faces.el.EvaluationException: java.lang.ClassCastException: java.lang.Integer cannot be cast to br.data.model.Usuario  
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)  
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)  
    ... 26 more  
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to br.data.model.Usuario  
    at br.jsf.LoginBean.log(LoginBean.java:52)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
    at java.lang.reflect.Method.invoke(Method.java:597)  
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262)  
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)  
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)  
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 

Desde já Agradeço Obrigado. :wink:

Cara, veja onde você passa o usuário. java.lang.Integer cannot be cast to br.data.model.Usuario

Em algum momento você espera um Usuario e recebe um Integer. Por isso o cast da erro.

Tem algum set aí que você ta dando errado.

Na Verdade na linha 09 do meu codigo onde está ,é Function passando parametros…

return em.createNativeQuery("select validarLogin('" + email + "','" + senha + "')").getFirstResult();  

.getFirstResult() ou .getSingleResult() me devolvem um inteiro isso eu sei estou siente do meu problema e na verdade tem que devolver objeto de usuário …

acontece náo faço ideia como fazer isso …
Tem Alguma saida para eu aplicar Coersao, ou alguma outra saida…

Mesmo Assim Obrigado…

Cara, olha a mensagem de erro:
at br.jsf.LoginBean.log(LoginBean.java:52)

E aí teu erro.

Putz so Bem Burro meswmo …mais vou posta meu codigo xhtml que contem metodo chamando a, classe bean que é jsf e passa para minha classe de persistencia Crud…
ve se assim consegue me ajudar

XTML

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
       <div align="center">
            <h3>GoNow! Sua Melhor Carona</h3>
            <hr width="50%" />
            Acesso Restrito<br/>
            <h5>Sistema Academico de Viagem - GoNow!</h5>
            <hr width="30%" />
                 
             <center>
               <h:form>
                <h:panelGrid columns="2" cellspacing="5">
                    Email:<h:inputText value="#{loginBean.usuario.email}"/>
                    Senha:<h:inputSecret value="#{loginBean.usuario.senha}"/>
                </h:panelGrid>
                <br/>
                <h:commandButton value="Login" action="#{loginBean.log()}" />
            </h:form>
            </center>
            
        </div> 

    </h:body>
</html>

Jsf - LoginBean

package br.jsf;

import br.data.model.Usuario;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Thiago
 */
@ManagedBean(name = "loginBean")
@RequestScoped
public class LoginBean {

    private Usuario usuario;
     private static int id;
    private static String email;
    private static String senha;
    
    

    /**
     * Creates a new instance of LoginBean
     */
    public LoginBean() {
        usuario = new Usuario();
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public LoginBean getLogin() {
        return this.getLogin();
    }

    public String log() {

        email = usuario.getEmail();
        senha = usuario.getSenha();
        
        if (new br.data.crud.CrudUsuario().loggin(email, senha) != null) {
            
            Usuario usu = (Usuario) new br.data.crud.CrudUsuario().loggin(email, senha);
            
          //  LoginBean.id = usu.getPkidUsuario();
            return "menu.xhtml";
        }
        return "index.xhtml";
    }

Crud Classe de Persistencia…


package br.data.crud;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

/**
 *
 * @author Thiago
 */
public class CrudUsuario {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("SistemaGoNowPU");

    public void persist(Object object) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public java.util.Collection<br.data.model.Usuario> getall() {
        EntityManager em = emf.createEntityManager();
        try {
            return em.createNamedQuery("Usuario.findAll").getResultList();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public Object loggin(String email, String senha) {

        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            
            
            
             return em.createNativeQuery("select validarLogin('" + email + "','" + senha + "')").getFirstResult();

          
            //return em.createNamedQuery("Usuario.findByEmailSenha").
            //setParameter("email", email).setParameter("senha", senha).getSingleResult();

            /*
             * @NamedQuery(name = "Usuario.findByEmailSenha", query = "SELECT t
             * FROM Usuario u WHERE u.email = :email AND u.senha = :senha")})
             */
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
            return null;
        } finally {
            em.close();
        }

    }
}