From 2a620bf30ada3e5b09bb370d1a9fed02a78c53ea Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Mon, 30 Jul 2012 19:20:05 +0200 Subject: Added abstract entity classes --- src/main/java/nu/xss/jpa/dao/GenericJpaDao.java | 54 +++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) (limited to 'src/main/java/nu/xss/jpa/dao/GenericJpaDao.java') diff --git a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java index 9e2babb..21ee630 100644 --- a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java +++ b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java @@ -5,15 +5,20 @@ import java.lang.reflect.ParameterizedType; import java.util.List; import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.NonUniqueResultException; import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; +import nu.xss.jpa.entity.TypedEntity; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class GenericJpaDao implements Dao, Serializable { +public abstract class GenericJpaDao, K> implements + Dao, Serializable { private static final long serialVersionUID = 4998055731089977476L; protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -54,11 +59,52 @@ public abstract class GenericJpaDao implements Dao, Serializable { } public List findAll() { - CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - CriteriaQuery c = cb.createQuery(this.entity); + return find(createSimpleQuery()); + } + + protected CriteriaBuilder getCriteriaBuilder() { + return entityManager.getCriteriaBuilder(); + } + + protected CriteriaQuery createQuery() { + CriteriaQuery c = getCriteriaBuilder().createQuery(this.entity); + return c; + } + + protected CriteriaQuery createSimpleQuery() { + CriteriaQuery c = getCriteriaBuilder().createQuery(this.entity); Root root = c.from(this.entity); c.select(root); - return entityManager.createQuery(c).getResultList(); + return c; } + protected List find(CriteriaQuery query) { + return entityManager.createQuery(query).getResultList(); + } + + protected E findSingle(CriteriaQuery query) { + return entityManager.createQuery(query).getSingleResult(); + } + + protected E findSingleOrNull(CriteriaQuery query) { + try { + return findSingle(query); + } catch (final NoResultException e) { + return null; + } catch (final NonUniqueResultException e) { + logger.error("Found more than one result.. return first one"); + return null; + } + } + + protected E findSingleFirstOrNull(CriteriaQuery query) { + try { + return findSingle(query); + } catch (final NoResultException e) { + return null; + } catch (final NonUniqueResultException e) { + logger.warn("Found more than one result.. return first one"); + return find(query).get(0); + } + } } -- cgit v1.2.3-55-g7522