Galera eu tenho um projeto e utilizo o hibernate para consultas no banco, porem mesmo assim meu banco fica caindo por estar fazendo muitas conexoes simultaneas.
abaixo esta o codigo da minha classe DAO generica
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public abstract class DAOGenerics<K, G> {
public void inserir(K obj) {
SessionFactory sf = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
Session s = sf.openSession();
s.getTransaction().begin();
s.saveOrUpdate(obj);
s.getTransaction().commit();
s.close();
}
public void apagar(K obj, Session s) {
s.getTransaction().begin();
s.delete(obj);
s.getTransaction().commit();
}
public void apagar(K obj) {
SessionFactory sf = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
Session s = sf.openSession();
try {
apagar(obj, s);
} finally {
s.close();
}
}
public abstract K buscar(G obj);
public abstract K buscar(G obj, Session s);
public abstract List<K> buscarTodos();
public abstract List<K> buscarTodos(Session s);
}
eu pensei em talvez criar os objetos SessionFactory e Session de forma estatica, mas nao sei se essa eh a solucao. Alguem pode me dar uma dica, dizer se essa classe esta certa ou se tem algum erro.
É uma aplicação desktop? Se sim, a melhor forma é criar o SessionFactory dentro de um bloco static. Se for uma aplicação web, crie dentro de um ServletContextListener. Quanto à Session, se for uma aplicação desktop stand-alone (que roda só na JVM local), você pode criá-la estaticamente também e mantê-la aberta enquanto a aplicação estiver no ar. Só lembre de fechá-la quando encerrar a aplicação. Se for uma aplicação web, o interessante é criar um ServletFilter e abrir e fechar a Session em cada método do DAO.
Só tome cuidado com a LazyInitializationException. Aqui tem algumas dicas quanto a isso: http://blog.caelum.com.br/enfrentando-a-lazyinitializationexception-no-hibernate/
Aproveitando segue link de uma das maneira que utilizo de como usar dao generico com hibernate + projeto de filtro criado por min.
Dem uma olhada neste link abaixo, para mim e alguns colegas foi muito util pode ser para vcs tb… http://www.guj.com.br/java/221618-filter-dinamico-para-hibernate