Como abrir a sessão do Hibernate uma vez só em um DAO generico?

5 respostas
E

Pensei em usar o construtor, mas essa classe nunca será instanciada e sim herdada… Como posso resolver isso?

5 Respostas

wender.jean

Não sei se entendi bem mas o “Singleton” não resolve seu problema não? Usando um metodo “static” que faz uma condição, se a sessão não existir cria caso o contrario mantém a mesma.
Não sei qual o seu nivel em java, mas no meu blog tem um post onde falo deste padrão caso não conheça.

http://wenderfreese.wordpress.com/2011/04/26/falando-de-singleton/

E

Eu já tenho um singleton no minha classe HibernateUtil que abre a sessão. Só que eu abro ela toda vez que vou chamar um método de inserir, remover, etc… Quero ver se existe uma forma de abrir uma única vez…

fernandopaiva

opa…eu faço assim.

//hibernate.cfg 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.current_session_context_class">thread</property> //aqui sempre mantem aberta
    <property name="hibernate.show_sql">true</property>
  </session-factory>
</hibernate-configuration>

//classe que retorna sempre a q esta aberta
import org.hibernate.Session;
import util.HibernateUtil;

public class RetornaSessaoHibernate{
    //classe que retorna a sessao aberta do hibernate
     public Session hibernateSession(){
        Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();    
        return sessao;
    }
}

//aqui a forma que utilizo
     Session sessao = new RetornaSessaoHibernate().hibernateSession();
     sessao.beginTransaction();
     sessao.getTransaction().commit();

t+ e boa sorte.

wender.jean

Geralmente utilizo um metodo dentro do DAO Generico:

public Session getSession() {
   return HibernateUtil.getSessionFactory().getCurrentSession();
}

A mesma ideia que o Fernando postou.

cbs_sp

Um exemplo:

Abraços,

Criado 8 de agosto de 2011
Ultima resposta 8 de ago. de 2011
Respostas 5
Participantes 4