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…
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:
packagebr.gov.rr.setrabes.util;importorg.apache.log4j.Logger;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.AnnotationConfiguration;//import org.postgresql.core.Logger;publicclassHibernateUtil{privatestaticLoggerlogger=Logger.getLogger(HibernateUtil.class);privatestaticSessionFactorysessionFactory;// ajuda a guardar as coisas na threadprivatestaticThreadLocal<Session>sessions=newThreadLocal<Session>();static{sessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();}publicstaticSessionopenSession(){if(sessions.get()!=null){logger.error("Alguem nao fechou uma j� 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� aberta!}sessions.set(sessionFactory.openSession());returnsessions.get();}publicstaticSessioncurrentSession(){returnsessions.get();}publicstaticvoidcloseCurrentSession(){sessions.get().close();sessions.set(null);}publicstaticSessionFactorygetSessionFactory(){returnsessionFactory;}}
yoshikichi
Tenta comentar a linha:
session = HibernateUtil.currentSession(); //pego a session atual;
pq e fecha a isntancia que está na varivel de isntancia
session.
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…
QUanto ao grupo, vou entrar lá.