summaryrefslogtreecommitdiffstats
path: root/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/nu/xss/jpa/dao/GenericJpaDao.java')
-rw-r--r--src/main/java/nu/xss/jpa/dao/GenericJpaDao.java35
1 files changed, 31 insertions, 4 deletions
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<E extends TypedEntity<K>, K> implements
public GenericJpaDao() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass()
.getGenericSuperclass();
- this.entity = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
+ Type type = genericSuperclass.getActualTypeArguments()[0];
+ if (type instanceof Class) {
+ this.entity = (Class<E>) type;
+ } else if (type instanceof ParameterizedType) {
+ this.entity = (Class<E>) ((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<E extends TypedEntity<K>, K> implements
public List<E> findAll() {
return find(createSimpleQuery());
}
+
+ public List<E> findAll(int count) {
+ return find(createSimpleQuery(), count);
+ }
+
+ public List<E> findAll(int count, int offset) {
+ return find(createSimpleQuery(), count, offset);
+ }
protected CriteriaBuilder getCriteriaBuilder() {
return entityManager.getCriteriaBuilder();
@@ -82,6 +96,19 @@ public abstract class GenericJpaDao<E extends TypedEntity<K>, K> implements
return entityManager.createQuery(query).getResultList();
}
+ protected List<E> find(CriteriaQuery<E> query, int count) {
+ TypedQuery<E> q = entityManager.createQuery(query);
+ q.setMaxResults(count);
+ return q.getResultList();
+ }
+
+ protected List<E> find(CriteriaQuery<E> query, int count, int offset) {
+ TypedQuery<E> q = entityManager.createQuery(query);
+ q.setFirstResult(offset);
+ q.setMaxResults(count);
+ return q.getResultList();
+ }
+
protected E findSingle(CriteriaQuery<E> query) {
return entityManager.createQuery(query).getSingleResult();
}