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/GenericJpaDao.java | 35 ++++++++++++++++++++++--- 1 file changed, 31 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 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