Problemas para atualizar

1 resposta
Cristofe

Olá Pessoal,

Estou com problemas para atualizar uma usuario no banco. O método atualizar da classe Bean não funciona. Segue minha Stack trace.

javax.faces.el.EvaluationException: org.hibernate.HibernateException: update is not valid without active transaction
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	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:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.hibernate.HibernateException: update is not valid without active transaction
	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:338)
	at $Proxy90.update(Unknown Source)
	at br.ifrr.DAO.UsuarioDAOHibernate.atualizar(UsuarioDAOHibernate.java:68)
	at br.ifrr.control.UsuarioRN.salvar(UsuarioRN.java:31)
	at br.ifrr.managed.UsuarioBean.atualizar(UsuarioBean.java:73)
	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:191)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

Meu form:

<h:column>
                            <h:commandButton value="Atualizar" action="#{usuarioBean.atualizar}">
                                <f:setPropertyActionListener target="#{usuarioBean.regraNavegacao}" value="returnListUsuario"/>
                            </h:commandButton>
                        </h:column>

Classe UsuarioBean:

public String atualizar() {
        FacesContext context = FacesContext.getCurrentInstance();
        UsuarioRN usuarioRN = new UsuarioRN();
        usuarioRN.salvar(this.usuario);
        return "returnListUsuario";

    }

Classe UsuarioRN:

public void salvar(Usuario usuario) {
        Integer codigo = usuario.getId();
        if (codigo == null || codigo == 0) {
            this.UsuarioDAO.salvar(usuario);
        } else {
            this.UsuarioDAO.atualizar(usuario);

        }
    }

Classe UsuarioDAO:

public interface UsuarioDAO {

    public void salvar(Usuario usuario);

    public void excluir(Usuario usuario);

    public void atualizar(Usuario usuario);

    public List<Usuario> listar();
}

Classe UsuarioDAOHibernate:

public void atualizar(Usuario usuario) {
        Session sessao = null;
        Transaction transacao = null;
        sessao = HibernateUtil.getSessionFactory().openSession();
        transacao = sessao.beginTransaction();
        this.sessao.update(usuario);
    }

Contudo não consigo atualizar.
Alguem pode me ajudar?

1 Resposta

gabrielfrios

O Hibernate está dizendo que não existe nenhuma transação aberta para vc poder executar o update. O que está retornando na chamada do método

Criado 9 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 1
Participantes 2