diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java index 50536b1..b8e85fc 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java @@ -48,6 +48,7 @@ import javax.persistence.EntityManager; import javax.persistence.Enumerated; import javax.persistence.Query; import javax.persistence.TransactionRequiredException; +import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; @@ -174,6 +175,49 @@ public class JPACrud implements Crud { List lista = query.getResultList(); return lista; } + + /** + * Perform a paged query by JPQL + * @param jpql + * @return + */ + public List findJPQL(String jpql) { + TypedQuery listQuery = getEntityManager().createQuery(jpql, getBeanClass()); + Pagination pagination = getPagination(); + if (pagination != null) { + CriteriaBuilder builder = getEntityManager().getCriteriaBuilder(); + CriteriaQuery countQuery = builder.createQuery(Long.class); + countQuery.select(builder.count(countQuery.from(getBeanClass()))); + getEntityManager().createQuery(jpql, getBeanClass()); + pagination.setTotalResults((int) (getEntityManager().createQuery(countQuery).getSingleResult() + 0)); + listQuery.setFirstResult(pagination.getFirstResult()); + listQuery.setMaxResults(pagination.getPageSize()); + } + return listQuery.getResultList(); + } + + /** + * Perform a paged query by CriteriaQuery + * @param jpql + * @return + */ + public List findCriteria(CriteriaQuery select) { + CriteriaBuilder builder = getEntityManager().getCriteriaBuilder(); + + CriteriaQuery countQuery = builder.createQuery(Long.class); + countQuery.select(builder.count(countQuery.from(getBeanClass()))); + getEntityManager().createQuery(countQuery); + + Pagination p = getPagination(); + p.setTotalResults((int) (getEntityManager().createQuery(countQuery).getSingleResult() + 0)); + + TypedQuery listQuery = getEntityManager().createQuery(select); + listQuery.setFirstResult(p.getFirstResult()); + listQuery.setMaxResults(p.getPageSize()); + + return listQuery.getResultList(); + } + /** * Retrieves the number of persisted objects for the current class type. -- libgit2 0.21.2