Estou com um pequeno problema: fiz uma pagina de pesquisa usando hibernate, a pesquisa quando feita uma primeira vez funciona blz, se eu dou um voltar no browser e tento pesquisar de novo estoura a exception na tela dizendo “Session is closed”. No código eu conferi e estou abrindo e fechando a sessão corretamente. Alguma ideía do que possa estar causando isso?
Session is closed - Hibernate
4 Respostas
Cara, isso já aconteceu comigo e eram duas as razões em momentos diferentes:
- tentar inicializar uma lazy collection na view, sendo que a session já estava fechada a tempos
- estava tentando pegar a connection a partir da session, e tentava fechar a primeira antes de fechar a segunda. Bizarro que o erro também só ocorria na segunda request. Se o caso é esse, feche primeiro a connection e depois a session.
O mais estranho é que eu não pego a connection a partir da session
Esse é o código que retorna a pesquisapublic List getCategoriesList() {
Session session = null;
try {
session = HibernateSessionFactory.currentSession();
Query query = session.createQuery("select Categories from br.com.dts.dtswebnorthwind.beans.Categories Categories order by Categories.categoryname");
return query.list();
} catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
} finally {
if (session != null) {
try {
session.close();
} catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
}
}
}
}
E esse é o código que abre e fecha a session
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.flush();
session.close();
}
}
achei o gato Lipe.No trecho
[/code]
public List getCategoriesList() {
Session session = null;
try {
session = HibernateSessionFactory.currentSession();
Query query = session.createQuery("select Categories from br.com.dts.dtswebnorthwind.beans.Categories Categories order by Categories.categoryname");
return query.list();
} catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
} finally {
if (session != null) {
try {
session.close(); [b]//Bem aki eu estou fechando com session.close() mas o correto seria HibernateSessionFactory.closeSession(); [/b] } catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
}
}
}
}
Que bom ;D
Mas, porquê não consegue pegar a connection??
Criado 7 de outubro de 2004
Ultima resposta 7 de out. de 2004
Respostas 4
Participantes 2
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo