diff --git a/src/main/java/es/uvigo/esei/daa/dao/GenericDAO.java b/src/main/java/es/uvigo/esei/daa/dao/GenericDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..f266206d66ba1cf50a56b73ccde458aeefe26b72 --- /dev/null +++ b/src/main/java/es/uvigo/esei/daa/dao/GenericDAO.java @@ -0,0 +1,53 @@ +package es.uvigo.esei.daa.dao; + +import java.lang.reflect.ParameterizedType; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; + +public abstract class GenericDAO { + + @PersistenceContext(unitName = "daa-PU") + protected EntityManager em; + + protected Class claseEntidad; + + private void establecerClaseEntidad() { + this.claseEntidad = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + } + + public T crear(T entidad) { + em.persist(entidad); + return entidad; + } + + public T actualizar(T entidad) { + return em.merge(entidad); + } + + public void eliminar(T entidad) { + em.remove(em.merge(entidad)); + } + + public T buscarPorId(Object id) { + if (this.claseEntidad == null) { + establecerClaseEntidad(); + } + return em.find(this.claseEntidad, id); + } + + public List buscarTodos() { + if (this.claseEntidad == null) { + establecerClaseEntidad(); + } + + CriteriaBuilder builder = em.getCriteriaBuilder(); + CriteriaQuery query = builder.createQuery(this.claseEntidad); + query.select(query.from(this.claseEntidad)); + return em.createQuery(query).getResultList(); + } + +}