javasf@googlegroups.com
[Top] [All Lists]

Re: [javasf] Dao Generica Hibernate

Subject: Re: [javasf] Dao Generica Hibernate
From: Mesias
Date: Tue, 26 Apr 2011 20:04:22 -0300
Onde trabalho começamos a usar criteria. Não pareceu tão complicado quanto falavam. Apenas achei pouco flexivel.

2011/4/26 Marco Polverini <mpolverini@xxxxxxxxxxxxxxxxxxxx>
Segue as minha classe genérica para a avaliação de vocês e no final o bean, ainda não testei. Aguardo comentários.

P/s. To meio perdido =).

___________________________________________________

public interface GenericRepository<T> {

    /**
     * @param instance
     */
    public void save(T instance);

    /**
     * @param isntance
     */
    public void update(T instance);

    /**
     * @param id
     * @return
     */
    public T findById(Integer id);

    /**
     * @return
     */
    public List<T> findAll();

    /**
     * @param example
     * @return
     */
    public List<T> findByConditions(String conditions);
   
    /**
     *
     * @return max ID long
     */
    public long getMaxId(String field);
   
    /**
     *
     * @param conditions
     * @return  max Id long
     */
    public long getMaxIdConditions(String field, String conditions);
}

___________________________________________________
public class GenericDao<T> implements GenericRepository<T> {

    private final Class typeClass;
    private Session session = new HibernateUtil().getSessionFactory().openSession();
    private Transaction transaction;

    public GenericDao(Class argClass) {
        typeClass = argClass;
    }

    /**
     *
     * @param instance
     * @see Save T
     */
    @Override
    public void save(T instance) {
        try {
            transaction = session.beginTransaction();
            session.save(instance);
        } catch (Exception ex) {
            transaction.rollback();
            System.err.println("Erro ao efetuar .save() para o objeto da classe " + instance.getClass().getName());
            ex.printStackTrace();
        } finally {
            transaction.commit();
            session.clear();
            session.close();
        }
    }

    /**
     *
     * @param instance
     * @see Update T
     */
    @Override
    public void update(T instance) {
        try {
            transaction = session.beginTransaction();
            session.update(instance);
        } catch (Exception ex) {
            transaction.rollback();
            System.err.println("Erro ao efetuar .update() para o objeto da classe " + instance.getClass().getName());
            ex.printStackTrace();
        } finally {
            transaction.commit();
            session.clear();
            session.close();
        }
    }

    /**
     *
     * @param id
     * @return  T
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public T findById(Integer id) {
        try {
            return (T) session.load(typeClass, id);
        } catch (Exception ex) {
            System.err.println("Erro ao efetuar busca por id para o objeto da classe " + typeClass.getName());
            ex.printStackTrace();
            return null;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     *
     * @return List<T>
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public List<T> findAll() {
        return session.createCriteria(typeClass).list();
    }

    /**
     *
     * @param conditions use t reference class
     * @return  List<T>
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public List<T> findByConditions(String conditions) {
        try {
            String sql = "From " + typeClass.getName() + " as t where " + conditions;
            return session.createQuery(sql).list();
        } catch (Exception ex) {
            System.err.println("Erro ao efetuar buscas com condições " + typeClass.getName());
            ex.printStackTrace();
            return null;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     *
     * @param field
     * @return MAX (ID)
     */
    @Override
    public long getMaxId(String field) {
        try {
            long result = (Long) this.session.createQuery(" select max(:field)+1 from "
                    + this.typeClass.getName() + " as t ").setParameter(":field", field).uniqueResult();
            if (result == 0) {
                result = 1;
            }
            return result;
        } catch (Exception ex) {
            System.err.println("Erro ao efetuar getMAX(ID) na classe " + typeClass.getName());
            ex.printStackTrace();
            return 0;
        } finally {
            session.clear();
            session.close();
        }
    }

    /**
     *
     * @param field
     * @param conditions
     * @return MAX ID
     */
    @Override
    public long getMaxIdConditions(String field, String conditions) {
        try {

            long result = (Long) this.session.createQuery(" select max(:field)+1 from "
                    + this.typeClass.getName() + " as t where :conditions")
                    .setParameter(":field", field)
                    .setParameter(":conditions", conditions)
                    .uniqueResult();

            if (result == 0) {
                result = 1;
            }

            return result;

        } catch (Exception ex) {

            System.err.println("Erro ao efetuar getMAX(ID) + condições na classe " + typeClass.getName());
            ex.printStackTrace();
            return 0;
        } finally {
            session.clear();
            session.close();
        }
    }
}
___________________________________________________

public class BancoDao extends GenericDao<Banco> implements BancoRepository {

    public BancoDao(Class argClass) {
        super(Banco.class);
    }
}
___________________________________________________
public class BancoBean extends BancoDao {

    public BancoBean(Class argClass) {
        super(Banco.class);
    }
}

___________________________________________________

___________________________________________________

___________________________________________________


Em 26/4/2011 10:51, Denis Rayan Luna da Silveira escreveu:
http://www.guj.com.br/java/239929-dao-generico-em-hibernate#1237895

Em 26 de abril de 2011 10:41, Marco Polverini <mpolverini@xxxxxxxxxxxxxxxxxxxx> escreveu:
Opa eu aguardo, estou me batendo atraz de material para fazer da melhor forma possível, toda ajuda é bem vinda.
Desde já obrigado.

Att.

Marcos Polverini

Em 16:59, Lessandro Notaroberto Pyrâmides escreveu:
Olha Marco, mais tarde se quiser posto algo aqui...
Abs,
Lessandro

Em 26 de abril de 2011 10:18, Marco Polverini <mpolverini@xxxxxxxxxxxxxxxxxxxx> escreveu:
Bom Dia pessoal,

Qual o melhor método para se implantar a dao genérica com hibernate?

Att.
Marcos Polverini
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Atenciosamente,

Denis Silveira
Fone: (61) 8540-3596
www.systic.com.br
Analista Desenvolvedor Java

"Eu adoraria mudar o mundo, mas eles não me dão o código fonte."





--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
======================================
Alejandro Mesias André Nebra Perez
Java/Python/Js/Something else Programmer
Skype.: meszias
Msn.:    amoavidasobre2rodas@xxxxxxxxxxx
Twitter: @meszias
Linux User #442506
Campinas - SP - Brasil - South America
======================================

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
<Prev in Thread] Current Thread [Next in Thread>