Dao Generico

5 respostas
P

Olá, Pessoal

Gostaria de um exemplo utilizando Dao Generico so com Hibernate.

Por exemplo esse aqui utiliza o spring http://javafree.uol.com.br/artigo/875163/Hibernate-3-com-Spring-e-DAO-Generico.html

Mas gostaria de utilizar esse padrão de projeto so com hibernate.

Abraços

5 Respostas

F

Olá, há pouco tempo fiz um post sobre no meu blog, dá uma olhada: http://serjava.blogspot.com.br/2011/12/persistencia-jpa-dao-generico.html

[]s

R

fabiomedeirosf:
Olá, há pouco tempo fiz um post sobre no meu blog, dá uma olhada: http://serjava.blogspot.com.br/2011/12/persistencia-jpa-dao-generico.html

[]s

Bacana esse teu exemplo,eu uso um esquema quase igual,só mudo a forma de recuperar a classe que eh passada como parâmetro:

public class GenericDAOImp<T,ID extends Serializable>  implements GenericDAO<T, ID> {
	@PersistenceContext
	private EntityManager entityManager;
	private final Class<T> classePersistente;

	public GenericDAOImp(){
		this.classePersistente = (Class<T>)
		((ParameterizedType)getClass().getGenericSuperclass())
		.getActualTypeArguments()[0];
	}
P

Então, tem como voce me mandar os fontes para [email removido]

Abraços

L

Eu uso assim:

protected Session sessao = null;
	private Transaction transacao = null;

	public void saveOrUpdate(Object pObjeto) throws Exception {
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			transacao = sessao.beginTransaction();
			sessao.saveOrUpdate(pObjeto);
			transacao.commit();
		} catch (Exception e) {
			transacao.rollback();
			throw e;
		} finally {
			sessao.close();
		}
	}

	public void delete(Object pObjeto) throws Exception {
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			transacao = sessao.beginTransaction();
			sessao.delete(pObjeto);
			transacao.commit();
		} catch (Exception e) {
			transacao.rollback();
			throw e;
		} finally {
			sessao.close();
		}
	}


	@SuppressWarnings("unchecked")
	protected Object buscaPorId(Class classe, Long id) throws Exception {
		Object obejto = null;
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			obejto = sessao.get(classe, id);
		} catch (Exception e) {
			obejto = null;
			throw e;
		} finally {
			sessao.close();
		}
		return obejto;
	}

	@SuppressWarnings("unchecked")
	public List<Object> filtroNomeGenerico(Class classe, String stringDePesquisa, String nomeCampoTabela)
			throws Exception {
		sessao = null;
		ArrayList<Object> lista;
		try {

			sessao = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = sessao.createCriteria(classe);
			criteria.add(Restrictions.ilike(nomeCampoTabela, "%" + stringDePesquisa + "%"));
			lista = (ArrayList<Object>) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

		} catch (Exception e) {
			lista = null;
		} finally {
			sessao.close();
		}
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<Object> findAll(Class classe) throws Exception {
		sessao = null;
		ArrayList<Object> lista = new ArrayList<Object>();
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = sessao.createCriteria(classe);
			lista = (ArrayList<Object>) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
		} catch (Exception e) {
			lista = null;
		} finally {
			sessao.close();
		}
		return lista;
	}
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public final class HibernateUtil {

	private static final SessionFactory sessionFactory = buildSessionFactory();

	private static SessionFactory buildSessionFactory() {
		return new AnnotationConfiguration().configure().buildSessionFactory();
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

}
F

Viva Pessoal, tenho algumas dúvidas com genericos que é o seguinte:

  • Considere a classe abaixo:

1- Não percebo para que serve o PK extends Serialiazable;
2- Agora estou a passar o parametro T nos métodos, mas antes estava a passar Object e funcionava na mesma ? Há diferença ?
3- Tenho uma classe ClientDaoImpl que extende BaseDaoImpl como a seguir

public class ClientDaoImpl extends BaseDaoImpl implements Serializable {
              ...
        }


         Não deveria ser assim ?  que isto me  erro. Este Long(PK extends Serializable) serve pra alguma coisa ?
         public class ClientDaoImpl extends BaseDaoImpl[b]&lt;Client,Long&gt;[/b] implements Serializable {
               ...
         }
public class BaseDaoImpl&lt;T,PK  extends Serializable&gt;  implements IBaseDao&lt;T,PK&gt;  {

    private Session session = null;
    private Transaction t = null;
    
//    private Class&lt;T&gt; type;
//
//    public BaseDaoImpl(Class&lt;T&gt; type) {
//        this.type = type;
//    }

    public void save(T object) {
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            t = session.beginTransaction();
            session.save(object);
            t.commit();
        } catch (HibernateException ex) {
            t.rollback();
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            t.rollback();
            System.out.println("Exception: " + ex);
        } finally {
            session.close();
        }
    }

    public Object getById(Class&lt;T&gt; classe, Serializable pk) {
        T o = null;
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            o = (T) session.load(classe, pk);
        } catch (HibernateException ex) {
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
       } finally {
            session.close();
        }
        return o;
    }
    
    public List listAll(String query) {
        ArrayList&lt;T&gt; list = new  ArrayList&lt;T&gt;();
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            t = session.beginTransaction();
            list = ( ArrayList&lt;T&gt;) session.createQuery(query).list();
            //List lista = session.createQuery("from Livro").list();
            t.commit();
        } catch (HibernateException ex) {
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
        } finally {
            session.close();
        }
        return list;
    }  

    public List listAll(Class classe) {      
        ArrayList&lt;T&gt; resultList = new ArrayList&lt;T&gt;();
        try {           
            session = HibernateUtil.getSessionFactory().openSession();
            Criteria c = session.createCriteria(classe).add(Restrictions.eq("status",Constants.ENABLED));
            addOrderToCriteria(c);
            resultList = (ArrayList&lt;T&gt;) c.list();
        } catch (HibernateException ex) {
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
        } finally {
            session.close();
        }
        
         System.out.println(" listAll "+ classe.getName() + " - "+ resultList.toString());
        
        return resultList;
    }

    public List listAll(Class&lt;T&gt; classe, int first, int max) {
        ArrayList&lt;T&gt; resultList = new ArrayList&lt;T&gt;();
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            Criteria c = session.createCriteria(classe).add(Restrictions.eq("status",Constants.ENABLED));
            addOrderToCriteria(c);
           
            if (first != 0) {
                c.setFirstResult(first);
            }
            if (max != 0) {
                c.setMaxResults(max);
            }
            resultList = (ArrayList&lt;T&gt;) c.list();
        } catch (HibernateException ex) {
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
       } finally {
            session.close();
        }

        return resultList;
    }

    public void remove(T object) {
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            t = session.beginTransaction();
            session.delete(object);
            t.commit();
        } catch (HibernateException ex) {
            t.rollback();
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            t.rollback();
            System.out.println("Exception: " + ex);
        } finally {
            session.close();
        }
    }

    public void update(T object) {
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            t = session.beginTransaction();
            session.update(object);
            t.commit();
        } catch (HibernateException ex) {
            t.rollback();
            System.out.println("HibernateException: " + ex);
        } catch (Exception ex) {
            t.rollback();
            System.out.println("Exception: " + ex);
        } finally {
            session.close();
        }
    }

    protected void addOrderToCriteria(Criteria c) {
    }


}

Muito Obrigado
Flávio

Criado 29 de março de 2012
Ultima resposta 17 de mai. de 2012
Respostas 5
Participantes 5