Problemas em fechar e abrir a session

6 respostas
Kleber-rr

Olá pessoal bom dia.

Estou tentando fechar a session do meu método salvar(), mas estou tendo um problema.

O método está assim:

public String salva() { System.out.println("Adicionando: " + funcionario.getNome()); Session session = HibernateUtil.openSession(); try { //... //... } finally { if (session != null) { try { System.out.println("finalizando a session"); session = HibernateUtil.currentSession(); //pego a session atual; session.clear(); //limpo session.close(); //depois fecho Session session2 = HibernateUtil.openSession(); //abro uma nova session funcionario = new Funcionario(); } catch (HibernateException e) { System.err.println("Hibernate Exception" + e.getMessage()); throw new RuntimeException(e); } }

Quando eu dou o openSession, o hibernate me diz que tem uma sessão aberta (session.get != null), e não grava o registro. Se eu retiro o openSession, ele me dá uma exception dizendo que a session já foi fechada…

Eae pessoal, alguma dica??
Obrigado.

6 Respostas

Kleber-rr

Esqueci de postar:
No meu HibernateUtil , o método openSession está assim:

public static Session openSession() { if (sessions.get() != null) { logger.error("Alguem nao fechou uma j� aberta!!"); // grave, alguem nao fechou uma j� aberta! } sessions.set(sessionFactory.openSession()); return sessions.get(); }

Vlw.

yoshikichi

Posta seu código ineteiro de HuibernateUtils.
Outra vc tem a instancia na sua varivel de instancia session, não precisa ir no HibernateUtils, para pegar novamente na finalização.

Kleber-rr
yoshikichi:
Posta seu código ineteiro de HuibernateUtils. Outra vc tem a instancia na sua varivel de instancia session, não precisa ir no HibernateUtils, para pegar novamente na finalização.
Olá yoshikichi, Segue o codigo:
package br.gov.rr.setrabes.util;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

//import org.postgresql.core.Logger;

public class HibernateUtil {

	private static Logger logger = Logger.getLogger(HibernateUtil.class);

	private static SessionFactory sessionFactory;

	// ajuda a guardar as coisas na thread
	private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();

	static {
		sessionFactory = new AnnotationConfiguration().configure()
				.buildSessionFactory();
	}

	public static Session openSession() {
		if (sessions.get() != null) {
			logger.error("Alguem nao fechou uma j&#65533; aberta!!");
			// sessions.get().close(); //PENSEI EM FECHAR CASO A SESSION AINDA ESTIVESSE ABERTA, MAS NÃO ADIANTOU...
			// sessions.set(null);
			// grave, alguem nao fechou uma j&#65533; aberta!
		}
		sessions.set(sessionFactory.openSession());
		return sessions.get();
	}

	public static Session currentSession() {
		return sessions.get();
	}

	public static void closeCurrentSession() {
		sessions.get().close();
		sessions.set(null);
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

}
yoshikichi

Tenta comentar a linha: session = HibernateUtil.currentSession(); //pego a session atual;
pq e fecha a isntancia que está na varivel de isntancia
session.

yoshikichi

se qrer temos um grupo de hibernate tb:
http://groups.google.com/group/hibernate-brasil

abs

Kleber-rr

yoshikichi:
Tenta comentar a linha: session = HibernateUtil.currentSession(); //pego a session atual;
pq e fecha a isntancia que está na varivel de isntancia
session.

Já tinha tentado, mesmo assim não resolve…
:frowning:
QUanto ao grupo, vou entrar lá.

Obrigado.

Criado 23 de fevereiro de 2011
Ultima resposta 24 de fev. de 2011
Respostas 6
Participantes 2