Boa noite,
Amigos, construir meus daos no meu sistema, mas não consegui encontrar uma boa forma de fechar a Session do Hibernate. Não estou usando nenhum framework.
Vejam um exemplo:
package dao;
import infra.CriadorDeSession;
import java.util.List;
import modelo.Account;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class AccountDAO {
Session session;
Transaction tx;
public AccountDAO(){
session=CriadorDeSession.getSession();
tx = session.beginTransaction();
}
public void salva(Account account) {
session.save(account);
tx.commit();
fecha();
}
public void remove(Account account){
session.delete(account);
fecha();
}
public void atualiza(Account account){
session.update(account);
fecha();
}
public Account get(Integer id){
Account account=(Account)session.load(Account.class,id);
fecha();return account;
}
@SuppressWarnings("unchecked")
public List<Account> lista(){
List<Account> list=session.createQuery("from modelo.Account").list();
fecha();return list;
}
public void fecha(){
session.close();
}
}
Percebam que eu criei um método para fechar a Session e sempre que termino um método do DAO chamo esse método.
O problema é que quando vou utilizar o objeto retornado do DAO numa outra classe, é lançada a exceção org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Percebi que caso eu não feche a Session esse erro não ocorre.
Qual a forma mais adequada para eu trabalhar com essa session?
Agradeço