[Resolvido]erro Servlet Hibernate

1 resposta
jairodione

olá Pessoal!

Estou estudando uma video aula sobre “JSF” e está acontecendo um erro na compilação que não consigo resolver. O erro está descrito abaixo:

  • GRAVE: Servlet /JSTL_Hibernate threw load() exception
    org.hibernate.SessionException: Session is closed!

Existe uma classe que executa a informação no BD ela está descrita abaixo:

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;

import br.com.siscom.util.HibernateUtil;

public class HibernateDAO<T> implements InterfaceDAO<T> {
	
	private Class<T> classe;
	
	public HibernateDAO(Class<T> classe) {
		super();
		this.classe = classe;
	}
	public void atualizar(T bean){
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit();
		session.update(bean);
	}
	public void salvar(T bean){
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit();
		session.save(bean);
	}
	public void excluir(T bean){
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit();
		session.delete(bean);
	}
	@Override
	public T getBean(Serializable codigo) {
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit();
		T bean = (T)session.get(classe, codigo);
		return bean;
	}
	@Override
	public List<T> getBeans() {
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit();
		List<T> beans = (List<T>)session.createCriteria(classe).list();
		return beans;
	}
}

Como se vê no código acima a sessão não é fechada porque no beginTransaction já é feito um commit. Como resolver este problema?

1 Resposta

jairodione

O erro era porque o commit estava no inicio da transaçãocomo mostra o código abaixo:

public void atualizar(T bean){
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction().commit;
		session.update(bean);
	}

o correto é fazer da forma que descrito no código abaixo:

public void atualizar(T bean){
		Session session = HibernateUtil.getSessionfactory().getCurrentSession();
		session.beginTransaction();
		session.update(bean);
		session.getTransaction().commit();
	}
Criado 23 de outubro de 2010
Ultima resposta 24 de out. de 2010
Respostas 1
Participantes 1