From 9794dd2ef3d43632014caf1b3817316e7d3fc6cb Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Tue, 14 Aug 2012 16:42:52 +0200 Subject: minor jpa tweaks --- src/main/java/nu/xss/jpa/dao/AbstractJpaDao.java | 40 ------------------------ src/main/java/nu/xss/jpa/dao/Dao.java | 2 ++ src/main/java/nu/xss/jpa/dao/GenericJpaDao.java | 35 ++++++++++++++++++--- 3 files changed, 33 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/nu/xss/jpa/dao/AbstractJpaDao.java diff --git a/src/main/java/nu/xss/jpa/dao/AbstractJpaDao.java b/src/main/java/nu/xss/jpa/dao/AbstractJpaDao.java deleted file mode 100644 index b1638ac..0000000 --- a/src/main/java/nu/xss/jpa/dao/AbstractJpaDao.java +++ /dev/null @@ -1,40 +0,0 @@ -package nu.xss.jpa.dao; - -import java.io.Serializable; -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -public abstract class AbstractJpaDao implements Dao, Serializable { - - private static final long serialVersionUID = 4998055731089977476L; - - @PersistenceContext - protected EntityManager entityManager; - - protected Class entity; - - public AbstractJpaDao(final Class entity) { - this.entity = (Class) entity; - } - - public void persist(E entity) { - entityManager.persist(entity); - - } - - public void remove(E entity) { - entityManager.remove(entity); - } - - public E findById(K id) { - return entityManager.find(entity, id); - } - - public List findAll() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/main/java/nu/xss/jpa/dao/Dao.java b/src/main/java/nu/xss/jpa/dao/Dao.java index 2c541c9..345804c 100644 --- a/src/main/java/nu/xss/jpa/dao/Dao.java +++ b/src/main/java/nu/xss/jpa/dao/Dao.java @@ -8,4 +8,6 @@ public interface Dao { void delete(E entity); E findById(K id); List findAll(); + List findAll(int count); + List findAll(int count, int offset); } diff --git a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java index 21ee630..1eb1f59 100644 --- a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java +++ b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java @@ -2,12 +2,14 @@ package nu.xss.jpa.dao; import java.io.Serializable; import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.NonUniqueResultException; import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; @@ -32,25 +34,29 @@ public abstract class GenericJpaDao, K> implements public GenericJpaDao() { ParameterizedType genericSuperclass = (ParameterizedType) getClass() .getGenericSuperclass(); - this.entity = (Class) genericSuperclass.getActualTypeArguments()[0]; + Type type = genericSuperclass.getActualTypeArguments()[0]; + if (type instanceof Class) { + this.entity = (Class) type; + } else if (type instanceof ParameterizedType) { + this.entity = (Class) ((ParameterizedType)type).getRawType(); + } } public void save(E entity) { logger.info("Persist Entity: {}.", entity.toString()); entityManager.persist(entity); - entityManager.flush(); logger.info("Saved entity: {}.", entity.toString()); } public void merge(E entity) { logger.info("Merge Entity: {}.", entity.toString()); entityManager.merge(entity); - entityManager.flush(); logger.info("Saved entity: {}.", entity.toString()); } public void delete(E entity) { - entityManager.remove(entity); + E persistentEntity = findById(entity.getId()); + entityManager.remove(persistentEntity); logger.info("Deleted entity: {}.", entity.toString()); } @@ -61,6 +67,14 @@ public abstract class GenericJpaDao, K> implements public List findAll() { return find(createSimpleQuery()); } + + public List findAll(int count) { + return find(createSimpleQuery(), count); + } + + public List findAll(int count, int offset) { + return find(createSimpleQuery(), count, offset); + } protected CriteriaBuilder getCriteriaBuilder() { return entityManager.getCriteriaBuilder(); @@ -82,6 +96,19 @@ public abstract class GenericJpaDao, K> implements return entityManager.createQuery(query).getResultList(); } + protected List find(CriteriaQuery query, int count) { + TypedQuery q = entityManager.createQuery(query); + q.setMaxResults(count); + return q.getResultList(); + } + + protected List find(CriteriaQuery query, int count, int offset) { + TypedQuery q = entityManager.createQuery(query); + q.setFirstResult(offset); + q.setMaxResults(count); + return q.getResultList(); + } + protected E findSingle(CriteriaQuery query) { return entityManager.createQuery(query).getSingleResult(); } -- cgit v1.2.3-55-g7522