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
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          Amigo boa noite , não sei se é a forma mais adequada mais eu faço basicamente assim
public class DaoX {
	Session sessao = null;
		Transaction tx = null;
	
public void salvar(Cliente u) {
		try {
			sessao = HibernateUtil.getSession();
			tx = sessao.beginTransaction();
			sessao.save(u);
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			ex.printStackTrace();
		} finally {
			if (sessao != null) {
				try {
					sessao.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}
Perceba que eu tenho um bloco finally que mesmo que meu hibernateUtil não retorne nada por exemplo , e eu não consiga realizar meu commit
ele vai testar se a sessao é diferente de null e se for ele vai tentar fechar a mesma , acredito que somente o meu bloco que testa a exception que esta muito abstrato
difucultando um pouco a interpretação da exception .
Espero ter ajudado.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Amigo, voce poderia fazer uma classe que gerencia esse controle de transacao, mais na minha opiniao, e nao sou um expert no assunto, vc deveria usar um framework de injecao de dependencia, tipo um spring…, mais e minha opiniao…
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Amigo, voce poderia fazer uh ma classe que gerencia esse controle de transacao, mais na minha opiniao, e nao sou um expert no assunto, vc deveria usar um framework de injecao de dependencia, tipo um spring…, mais e minha opiniao…
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Muito obrigado worldsoft e mausexdd.
Alguém teria um exemplo da utilização de Spring nesse caso?
Vou procurar algumas coisas, e posto o que achar.
Grato
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          eu vi spring bem por cima , oque vi na injecao de dep lá , é que não era necessario ficar instanciando objetos , voce só passa o BackBean no xml , ele faz isto para voce , agora sobre persistencia não sei dizer, de uma olhada no Framework VRaptor parece que ele integra hibernate com Spring , ctz tem métodos e maneiras bem eficazes de realizar esses metodos com este framework