Seguite galera, estou implementando um sistema usando hibernate annotations e conheco o Hibernate a pouco tempo!
De todas as literaturas que pesquisei, todas criam uma classe DAO para respectiva classe persistente… então decidi criar uma classe GenericDAO, para controlar a persistencia de todos os objetos da aplicação.
Os códigos seguem logo abaixo:
HiberbateUtil
import org.hibernate.*;
import org.hibernate.cfg.*;
/**
*
* @author Rogerio MQ
*/
public final class HibernateUtil
{
private static SessionFactory sessionFactory;
private static SessionFactory getSessionFactory() throws MappingException
{
if(sessionFactory == null)
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
return sessionFactory;
}
public static Session getSession()
{
return getSessionFactory().openSession();
}
}
GenericDAO, Classe que vai controlar a persistencia de todos os meus objetos.
/*
* GenericDAO.java
*
* Created on 22 de Abril de 2007, 16:15
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package spsv02.persistencias;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.*;
import org.hibernate.criterion.Order;
import org.hibernate.stat.SessionStatistics;
/**
*
* @author Rogerio MQ
*/
public class GenericDAO
{
private static Session sessao;
private Transaction transacao;
/** Creates a new instance of GenericDAO */
public void objInserir( Object obj ) throws Exception
{
sessao = HibernateUtil.
transacao = sessao.beginTransaction();
sessao.save(obj);
sessao.flush();
transacao.commit();
sessao.close();
}
public void objAlterar( Object obj ) throws Exception
{
sessao = HibernateUtil.getSession();
transacao = sessao.beginTransaction();
sessao.update(obj);
sessao.flush();
transacao.commit();
sessao.close();
}
public void objDeletar( Object obj ) throws Exception
{
sessao = HibernateUtil.getSession();
transacao = sessao.beginTransaction();
sessao.delete(obj);
sessao.flush();
transacao.commit();
sessao.close();
}
public List listar(Class clazz) throws Exception
{
sessao = HibernateUtil.getSession();
transacao = sessao.beginTransaction();
List objts;
objts = null;
Criteria selectAll = sessao.createCriteria(clazz);
transacao.commit();
objts = selectAll.list();
sessao.close();
return objts;
}
public Object listar(Class clazz, String pk) throws Exception
{
sessao = HibernateUtil.getSession();
transacao = sessao.beginTransaction();
Fornecedor objt = (Fornecedor) sessao.load(clazz, new Integer(Integer.parseInt(pk)) );
transacao.commit();
sessao.flush();
sessao.close();
return objt;
}
public void rollBack()
{
transacao.rollback();
sessao.close();
}
public void closeConnection() throws Exception
{
sessao = HibernateUtil.getSession();
sessao.connection().createStatement().execute("SHUTDOWN");
}
}
Por enquanto a classe GenericDAO tem apenas essas funcionalidades, mais pretendo deixa-la padrão para uso na persistencia de qualquer tipo de objeto que persistirá no Banco, ao infez de ficar criando classes DAO para controlar cada uma das classes persistentes.
Para quem gostar da idéia ( transcrever as classes acima padronizando-as para qualquer tipo de uso)… estamos ai!!!
Agradeço desde já!
Abraços!