package org.telosys.starterkits.strutsjpa; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.TypedQuery; /** * @author slabbe * * @param <T> * @param <PK> */ public abstract class GenericJpaDao<T, PK extends java.io.Serializable> { private final Class<T> persistentClass; /** * Constructor * @param persistentClass */ public GenericJpaDao(final Class<T> persistentClass) { this.persistentClass = persistentClass; } /** * Find entity By Id * @param <T> * @param id * @return */ public <T> T findById(final PK id) { final EntityManager em = getEntityManager(); return (T) em.find(this.persistentClass, id); } /** * Find entity By name query * @param queryName * @param queryParams * @return */ public List<T> findByNamedQuery(final String queryName, final Map<String, Object> queryParams) { final EntityManager em = getEntityManager(); final Query query = em.createNamedQuery(queryName); final Iterator<String> i = queryParams.keySet().iterator(); while (i.hasNext()) { String key = i.next(); query.setParameter(key, queryParams.get(key)); } return query.getResultList(); } /** * Load a list of entities * @param <T> * @param query * @return */ public <T> Collection<T> loadList(final String query) { final EntityManager em = getEntityManager(); final TypedQuery q = em.createQuery(query, this.persistentClass); return q.getResultList(); } /** * Load all entities * @param <T> * @param query * @return */ public <T> List<T> loadAll() { final EntityManager em = getEntityManager(); final Query query = em.createQuery("from " + persistentClass.getName()); return query.getResultList(); } /** * Insert entity * @param <T> * @return */ public <T> T insert(final T entity) { final EntityManager em = getEntityManager(); em.persist(entity); return (entity); } /** * Update entity * @param <T> * @param entity * @return */ public <T> T update(T entity) { final EntityManager em = getEntityManager(); entity = em.merge(entity); return entity; } /** * Delete entity by pk * @param pk */ public void delete(final PK pk) { final EntityManager em = getEntityManager(); final T entity = em.find(this.persistentClass, pk); if (entity != null) { em.remove(entity); } } /** * Delete entity * @param entity */ public void delete(final T entity) { final EntityManager em = getEntityManager(); if (entity != null) { em.refresh(entity); em.remove(entity); } } // *************************************************************************************** /** * Get EntityManager * @return EntityManager */ protected EntityManager getEntityManager() { return EntityManagerHelper.getEntityManager(); } }