br.com.hslife.catu.dao.GenericDao.java Source code

Java tutorial

Introduction

Here is the source code for br.com.hslife.catu.dao.GenericDao.java

Source

/***
    
Copyright (c) 2010-2014 Hrcules S. S. Jos
    
    
    
Este arquivo  parte do programa CATU.
    
CATU  um software livre; voc pode redistribui-lo e/ou 
    
modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como 
    
publicada pela Fundao do Software Livre (FSF); na verso 2.1 da 
    
Licena.
    
    
    
Este programa  distribudo na esperana que possa ser til, 
    
mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAO a qualquer
    
MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU 
    
em portugus para maiores detalhes.
    
    
    
Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o 
    
nome de "LICENSE.TXT" junto com este programa, se no, acesse o site HSlife no 
    
endereco www.hslife.com.br ou escreva para a Fundao do Software Livre(FSF) Inc., 
    
51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
    
    
    
Para mais informaes sobre o programa CATU e seus autores acesse o 
    
endereo www.hslife.com.br, pelo e-mail contato@hslife.com.br ou escreva para 
    
Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, 
    
Marco II - Nova Iguau, RJ, Brasil.
    
***/

package br.com.hslife.catu.dao;

import br.com.hslife.catu.db.HibernateUtil;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * Classe GenericDao
 *
 * Classe responsvel por prover atributos, mtodos e objetos comuns s
 * classes herdeiras (classes tipo GenericDao) usando a InterfaceDao para prover
 * os mtodos genricos que sero reconhecidos pela camada acima.
 *
 * Esta classe possui os seguintes atributos comuns a todas as classes GenericDao:
 * - Session session
 * - Transaction transaction
 * - Criteria criteria;
 * - Query query;
 * - String errorMessage - armazena a mensagem de erro;
 * - String stackTrace - armazena resultado resultado do mtodo printStackTrace;
 *
 * Os seguintes mtodos so comuns a todos
 *
 * - save(Object obj)
 * - update (Object obj)
 * - delete (Object obj)
 * - find (Integer id) retorna Object
 * - find (String campo, Object valor) retorna Object
 * - find (String campo, Object valor) retorna List<Object>
 * - findAll() retorna List<Object>
 *
 * Os mtodos de busca, no momento, precisam de valores exatos para no
 * causarem exceo. Atentar ao enviar valores e tratar as excees geradas.
 *
 *
 * @author HSlife
 */
public class GenericDao {

    // Atributos protegidos. Utilizados para as classes que herdam de GenericDao
    protected Session session;
    protected Transaction transaction;
    protected Criteria criteria;
    protected Query query;
    protected String errorMessage;
    protected String stackTrace;

    protected GenericDao() {
        // construtor protegido para impedir que classes no herdeiras e fora
        // do pacote de persistncia instancie a classe
        errorMessage = null;
        stackTrace = null;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public String getStackTrace() {
        return stackTrace;
    }

    protected void save(Object obj) {
        //session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.beginTransaction();
        try {
            HibernateUtil.beginTransaction();
            HibernateUtil.getSession().save(obj);
            HibernateUtil.commitTransaction();
            HibernateUtil.getSession().flush();
            // session.save(obj);
            //transaction.commit();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            //transaction.rollback();
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        } /*finally {
          if (session.isOpen()) {
              session.close();
          }
          }*/
    }

    protected void update(Object obj) {
        //session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.beginTransaction();
        try {
            HibernateUtil.beginTransaction();
            HibernateUtil.getSession().update(obj);
            HibernateUtil.commitTransaction();
            //session.update(obj);
            //transaction.commit();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            //transaction.rollback();
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        } /*finally {
          if (session.isOpen()) {
              session.close();
          }
          }*/
    }

    protected void delete(Object obj) {
        //session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.beginTransaction();
        try {
            /*try {
            session.delete(obj);
            transaction.commit();
            } finally {
            if (session.isOpen()) {
                session.close();
            }
            }*/
            HibernateUtil.beginTransaction();
            HibernateUtil.getSession().delete(obj);
            HibernateUtil.commitTransaction();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            //transaction.rollback();
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
    }

    /*
     *  Busca especfica usando resultado id informado
     */
    protected Object find(Class classe, long id) {
        //session = HibernateUtil.getSessionFactory().openSession();
        Object resultado = null;
        try {
            resultado = HibernateUtil.getSession().get(classe, id);
            /*try {
            resultado = session.get(classe, id);
            } finally {
            if (session.isOpen()) {
                session.close();
            }
            }*/
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return resultado;
    }

    /*
     * Busca resultado valor no campo informado
     * Use em situaes que voc sabe que ir retornar somente um valor.
     * Mais til em campos nicos(unique) e que no contm repetio de valores
     */
    protected Object find(Class classe, String campo, Object valor) {
        Object resultado = null;
        //session = HibernateUtil.getSessionFactory().openSession();
        try {
            //try {
            resultado = HibernateUtil.getSession().createCriteria(classe).add(Restrictions.eq(campo, valor))
                    .uniqueResult();
            //} finally {
            //if (session.isOpen()) {
            //  session.close();
            //}
            //}
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return resultado;
    }

    /*
     * Retorna uma lista de objetos obtidos na busca pelo valor no campo
     * informado. Caso nenhum objeto seja encontrado resultado mtodo retorna uma lista
     * vazia (size = 0)
     */
    protected List<Object> findAll(Class classe, String campo, Object valor) {
        //session = HibernateUtil.getSessionFactory().openSession();
        List<Object> lista = null;
        try {
            //try {
            lista = HibernateUtil.getSession().createCriteria(classe).add(Expression.eq(campo, valor))
                    .addOrder(Order.asc("id")).list();
            /*} finally {
            if (session.isOpen()) {
                session.close();
            }
            }*/
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return lista;
    }

    protected List<Object> findAll(Class classe) {
        //session = HibernateUtil.getSessionFactory().openSession();
        List<Object> lista = null;
        try {
            //try {
            lista = HibernateUtil.getSession().createCriteria(classe).addOrder(Order.asc("id")).list();
            /*} finally {
            if (session.isOpen()) {
                session.close();
            }
            }*/
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return lista;
    }

    /*
     * Retorna uma lista de objetos obtidos na busca pelo valor no campo
     * informado. Caso nenhum objeto seja encontrado resultado mtodo retorna uma lista
     * vazia (size = 0)
     */
    protected List<Object> search(String classe, String campo, String valor) {
        //session = HibernateUtil.getSessionFactory().openSession();
        List<Object> lista = null;
        try {
            //try {
            String hql = "from " + classe + " where " + campo + " like '%" + valor + "%' order by " + campo;
            lista = HibernateUtil.getSession().createQuery(hql).list();
            /*} finally {
            if (session.isOpen()) {
                session.close();
            }
            }*/
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return lista;
    }

    protected List<Object> query(Class classe, String sqlQuery) {
        //session = HibernateUtil.getSessionFactory().openSession();
        List lista = null;
        try {
            Query queryResult = HibernateUtil.getSession().createSQLQuery(sqlQuery).addEntity(classe);
            lista = queryResult.list();
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        } /*finally {
          if (session.isOpen()) {
              session.close();
          }
          }*/
        return lista;
    }

    protected Object queryUnique(Class classe, String sqlQuery) {
        //session = HibernateUtil.getSessionFactory().openSession();
        Object resultado = null;
        try {
            Query queryResult = HibernateUtil.getSession().createSQLQuery(sqlQuery).addEntity(classe);
            resultado = queryResult.uniqueResult();
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        } /*finally {
          if (session.isOpen()) {
              session.close();
          }
          }*/
        return resultado;
    }

    protected void queryNoResult(String sqlQuery) {
        //session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.beginTransaction();
        try {
            HibernateUtil.beginTransaction();
            HibernateUtil.getSession().createSQLQuery(sqlQuery).executeUpdate();
            HibernateUtil.commitTransaction();
            //session.createSQLQuery(sqlQuery).executeUpdate();
            //transaction.commit();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            //transaction.rollback();
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        } finally {
            if (session.isOpen()) {
                session.close();
            }
        }
    }
}