br.com.hslife.sirce.persistencia.GenericDao.java Source code

Java tutorial

Introduction

Here is the source code for br.com.hslife.sirce.persistencia.GenericDao.java

Source

/*
      
 Copyright (c) 2010 JOSE, Hrcules S. S. et al.
    
Este arquivo  parte do programa SIRCE.
    
    
SIRCE  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 implcita 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 SIRCE 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.
      
*/

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.hslife.sirce.persistencia;

import br.com.hslife.sirce.hibernate.HibernateUtil;
import br.com.hslife.sirce.modelo.Prontuario;

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.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 {
            session.save(obj);
            transaction.commit();
        } catch (Exception e) {
            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 {
            session.update(obj);
            transaction.commit();
        } catch (Exception e) {
            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();
                }
            }
        } catch (Exception e) {
            transaction.rollback();
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
    }

    /*
     *  Busca especfica usando resultado id informado
     */
    protected Object find(Class classe, Integer id) {
        session = HibernateUtil.getSessionFactory().openSession();
        Object resultado = null;
        try {
            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 = session.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 = session.createCriteria(classe).add(Expression.eq(campo, valor)).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 = session.createCriteria(classe).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 + "%'";
                lista = session.createQuery(hql).list();
            } finally {
                if (session.isOpen()) {
                    session.close();
                }
            }
        } catch (Exception e) {
            errorMessage = e.getMessage();
            stackTrace = e.getStackTrace().toString();
            e.printStackTrace();
        }
        return lista;
    }

    @SuppressWarnings("unchecked")
    protected List<Object> query(Class classe, String sqlQuery) {
        session = HibernateUtil.getSessionFactory().openSession();
        List lista = null;
        try {
            Query queryResult = session.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 = session.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;
    }
}