E ai pessoal,
Estou criando uma aplicacao aqui e ao invés de criar um DAO para cada entitdade eu fiz um DAO que dá pra utilizar com qualquer tabela! Mas queria umas opiniões se é legal se ficou bom e tudo!
aguardo as críticas
import br.com.sysaguas.entidade.DAO.EntityInterface;
import br.com.sysaguas.entidade.Tipoquarto;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NamedQuery;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class GenericDAO<T> implements GenericRepository<T> {
private EntityManagerFactory emf = null;
private EntityManager em = null;
public GenericDAO() {
if(emf == null){
this.emf = Persistence.createEntityManagerFactory("SysAguasPU");
}
}
public void persist(T instance) {
em = emf.createEntityManager();
try{
em.getTransaction().begin();
em.persist(instance);
em.getTransaction().commit();
} finally {
em.close();
}
}
public void update(T instance) {
em = emf.createEntityManager();
try{
em.getTransaction().begin();
em.merge(instance);
em.getTransaction().commit();
} finally {
em.close();
}
}
public void delete(Integer codigo, String tipoObjeto) {
// if(!em.isOpen()){
em = emf.createEntityManager();
// }
try{
em.getTransaction().begin();
em.remove(findToRU(codigo,tipoObjeto));
em.getTransaction().commit();
} finally {
em.close();
}
}
private T findToRU(Integer id,String tipoObjeto) throws IllegalStateException{
String sql = ("SELECT t FROM "+ tipoObjeto +" t WHERE t.codigo = :codigo");
Query e = em.createQuery(sql);
e.setParameter("codigo",id);
return (T) e.getSingleResult();
}
public T findById(Integer id,String tipoObjeto) throws IllegalStateException{
// if(!em.isOpen()){
em = emf.createEntityManager();
// }
try{
String sql = ("SELECT t FROM "+ tipoObjeto +" t WHERE t.codigo = :codigo");
Query e = em.createQuery(sql);
e.setParameter("codigo",id);
return (T) e.getSingleResult();
}finally {
em.close();
}
}
}