From 02a11b5a55f5c60b0c28d0bfc57503e510214533 Mon Sep 17 00:00:00 2001 From: hacklego Date: Thu, 16 Feb 2017 01:17:33 +0100 Subject: [PATCH] Add GenericDAO with basic crud for JPA entities. --- .../es/uvigo/esei/daa/dao/GenericDAO.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/main/java/es/uvigo/esei/daa/dao/GenericDAO.java 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 0000000..f266206 --- /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(); + } + +} -- 2.18.1