Hibernate erro:close session

7 respostas
diogoprosoft

Galera estou tentando gravar o registro apos o outro sendo que quando vou gravar o segundo aparece esse erro

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.hibernate.SessionException: Session is closed!
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.hibernate.SessionException: Session is closed!
	org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
	org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:503)
	org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	hibernate.PersistenciaDAO.salvar(PersistenciaDAO.java:24)
	usuario.action.UsuarioAction.salvar(UsuarioAction.java:51)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
	org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:150)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16

Meu DAO esta assim

Session session = HibernateFactory.getSession();
    Transaction transaction = session.beginTransaction();
    
                
    public void salvar(Object object) throws Exception{
                                              
       session.saveOrUpdate(object);
       session.flush();
       transaction.commit();
       session.close();
       
    }

Minha action

persistencia.salvar(usuario);

O que devo fazer para poder gravar varios registros?

7 Respostas

L

Voce tá abrindo uma sessão… e no método salvar voce está fechando ela…
ou você abre a sessão no salvar também… ou não fecha no salvar()…

mateusprado

exatamente. vc abre a session fora do metodo. abre sua session dentro de seu metodo salva().

public void salvar(Object object) throws Exception{   

     try {

     Session session = HibernateFactory.getSession();   
     Transaction transaction = session.beginTransaction(); 
                                             
   session.saveOrUpdate(object);   
   session.flush();   
   transaction.commit();   
   
   }catch{ 


   }finally{
   s.close();
     
}

+/- isso tenta ai, só pra vc entender. ai vc implementa ai

abraços

diogoprosoft

Fiz o que vc falou e deu esse erro

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.hibernate.exception.DataException: Could not execute JDBC batch update
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.hibernate.exception.DataException: Could not execute JDBC batch update
	org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77)
	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	hibernate.PersistenciaDAO.salvar(PersistenciaDAO.java:26)
	usuario.action.UsuarioAction.salvar(UsuarioAction.java:51)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
	org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:150)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.sql.BatchUpdateException: Entrada em lote 0 insert into usuario (senha, nome) values (zizinha, zi) foi abortada. Chame getNextException para ver a causa.
	org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2530)
	org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1317)
	org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:350)
	org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2592)
	org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
	org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	hibernate.PersistenciaDAO.salvar(PersistenciaDAO.java:26)
	usuario.action.UsuarioAction.salvar(UsuarioAction.java:51)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
	org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:150)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16

O DAO ficou assim

public void salvar(Object object) throws Exception{
       
       Session session = HibernateFactory.getSession();
       Transaction transaction = session.beginTransaction();
       try{        
       
       session.saveOrUpdate(object);
       session.flush();
       transaction.commit();
       }finally{
         session.close();    
       }
    }

O que pode ser agora :frowning:

diogoprosoft

Blz consegui arrumei a minha action tinha que abrir a sessao dentro do metodo salvar tbm, valeu

mateusprado

O SESSION TEM QUE INICIAR DENTRO DO TRY TAMBEM, OK?

ABS

diogoprosoft

So que se eu fizer detro do try da erro no finally

bbmany

diogo soares

Como ficou sua action?

Criado 19 de junho de 2008
Ultima resposta 7 de jan. de 2009
Respostas 7
Participantes 4