Olá pessoal gostaria de saber a opinão de todos sobre o meu DAO genérico
gostaria de saber se é preciso melhorar alguma coisa.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.icmc.usp.dao;
import br.icmc.usp.excecoes.ExcecaoDAO;
import br.icmc.usp.util.JPAUtil;
import java.util.List;
import javax.persistence.EntityTransaction;
import javax.persistence.EntityManager;
import javax.persistence.Query;
/**
* Classe utilizada para fazer realizar as operações de banco de dados
* @author Ricardo
*/
public class DAOGenerico<T> implements InterfaceDAO<T> {
private EntityTransaction getTransacao(EntityManager session){
EntityTransaction transaction = session.getTransaction();
return transaction;
}
/**
* Salva o objeto no banco de dados.
* @param object: Entidade a ser Salva (se ainda não existir)
* @return Retorna a Entidade passada como parâmetro.
* @throws Exception
*/
@Override
public T salvar(T object) throws ExcecaoDAO {
EntityTransaction transaction = null;
EntityManager session = JPAUtil.getInstance().getEntityManager();
try{
transaction = getTransacao(session);
transaction.begin();
session.persist(object);
transaction.commit();
return object;
}
catch(Exception e){
transaction.rollback();
throw new ExcecaoDAO(object.getClass().getSimpleName().toString() + " :: Erro ao inserir os dados!");
}
finally {
session.close();
}
}
/**
* Retorna a lista de itens salvo no banco de dados de acordo com a Entidade passada como parâmetro.
* @param classe : Entidade que deverá buscar no banco de dados.
* @return List contendo todos os objetos encontrados da entidade passada como parâmetro.
*/
public List<T> listar(Class classe) throws ExcecaoDAO {
EntityManager session = JPAUtil.getInstance().getEntityManager();
try{
Query query = session.createQuery("SELECT e FROM " +
classe.getSimpleName().toString() + " e");
return (List<T>) query.getResultList();
}
catch(Exception e){
throw new ExcecaoDAO(classe.getSimpleName().toString() +
" :: Erro ao listar os dados!");
}
finally {
session.close();
}
}
/**
* Faz a busca no banco pelo ID da entidade
* @param classe : Entidade a ser buscada
* @param id : valor a ser procurado
* @return Objeto encontrado no banco, caso não encontre será retornado NULL
* @throws Exception
*/
@Override
public T procurarPorId(Class classe, Integer id) throws ExcecaoDAO {
EntityManager session = JPAUtil.getInstance().getEntityManager();
T object = null;
try{
object = (T) session.find(classe, id);
return object;
}
catch(Exception e){
throw new ExcecaoDAO(classe.getSimpleName().toString() +
" :: Erro ao procurar os dados do Aluno. (O id não existe!).");
}
finally {
session.close();
}
}
/**
* Atualiza o objeto no banco de dados.
* @param object: Entidade a ser Atualizada (se já existir)
* @return Retorna a Entidade passada como parâmetro.
* @throws Exception
*/
@Override
public T atualizar(T object) throws ExcecaoDAO {
EntityTransaction transaction = null;
EntityManager session = JPAUtil.getInstance().getEntityManager();
try{
transaction = getTransacao(session);
transaction.begin();
session.merge(object);
transaction.commit();
return object;
}catch(Exception e){
transaction.rollback();
throw new ExcecaoDAO(object.getClass().getSimpleName().toString() +
" :: Erro ao atualizar dados!");
}
finally {
session.close();
}
}
/**
* Remove a Entidade do banco de dados.
* @param object: Entidade a ser removido do banco de dados.
* @throws Exception
*/
@Override
public T excluir(T object) throws ExcecaoDAO {
EntityTransaction transaction = null;
EntityManager session = JPAUtil.getInstance().getEntityManager();
try{
transaction.begin();
session.remove(object);
transaction.commit();
return object;
}catch(Exception e){
transaction.rollback();
throw new ExcecaoDAO(object.getClass().getSimpleName().toString() +
" :: Erro ao Excluir os dados!");
}
finally {
session.close();
}
}
}
[]'s.
.