Hibernate erro:close session

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?

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()…

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

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:

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

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

ABS

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

diogo soares

Como ficou sua action?