Java Code Examples for javax.persistence.criteria.CriteriaQuery.groupBy()

The following are Jave code examples for showing how to use groupBy() of the javax.persistence.criteria.CriteriaQuery class. You can vote up the examples you like. Your votes will be used in our system to get more good examples.
Example 1
Project: datatable-java   File: DatatableDAOImpl.java   Source Code and License Vote up 7 votes
private long countWhenGroupBy(final Specification<T> specification, final DatatableQuery<?, T> input) {
  	final EntityManager entityManager = entityManagerFactory.createEntityManager();
      final CriteriaBuilder qb = entityManager.getCriteriaBuilder();
      final CriteriaQuery<Long> cq = qb.createQuery(Long.class);
      final Root<T> from = cq.from(this.entity);
      
      cq.select(qb.literal(1L));
      if (specification != null) {
          cq.where(specification.toPredicate(from, cq, qb));
      }
      if (input.getGroupByColumns() != null && !input.getGroupByColumns().isEmpty()) {
          final List<Expression<?>> groupByList = new ArrayList<Expression<?>>();
          DatatableHelper.getExpressions(from, input.getGroupByColumns(), groupByList);
          cq.groupBy(groupByList);
      }
      final long ret = entityManager.createQuery(cq).getResultList().size();
      entityManager.close();
return ret;
  }
 
Example 2
Project: linq   File: JpaUtil.java   Source Code and License Vote up 6 votes
@SuppressWarnings("unchecked")
public static <T> TypedQuery<Long> getCountQuery(CriteriaQuery<T> cq) {
	Class<T> domainClass = cq.getResultType();
	EntityManager em = getEntityManager(domainClass);
	CriteriaBuilder cb = em.getCriteriaBuilder();
	CriteriaQuery<Long> countCq = cb.createQuery(Long.class);
	Root<T> root;
	if (cq.getRestriction() != null) {
		countCq.where(cq.getRestriction());
	}
	if (cq.getGroupRestriction() != null) {
		countCq.having(cq.getGroupRestriction());
	}
	if (cq.getRoots().isEmpty()) {
		root = countCq.from(domainClass);
	} else {
		countCq.getRoots().addAll(cq.getRoots());
		root = (Root<T>) countCq.getRoots().iterator().next();
	}
	countCq.groupBy(cq.getGroupList());
	if (cq.isDistinct()) {
		countCq.select(cb.countDistinct(root));
	} else {
		countCq.select(cb.count(root));
	}

	return em.createQuery(countCq);
}
 
Example 3
Project: datatable-java   File: DatatableDAOImpl.java   Source Code and License Vote up 4 votes
@SuppressWarnings("unchecked")
  private <R> List<R> findAllImpl1(final DatatableQuery<R, T> input, final Specifications<T> specifications,
      final Pageable pageable) {

      // create query
  	final EntityManager entityManager = entityManagerFactory.createEntityManager();
      final CriteriaBuilder qb = entityManager.getCriteriaBuilder();
      final CriteriaQuery<T> cq = qb.createQuery(this.entity);

      // Etablir entité racine
      final Root<T> from = cq.from(this.entity);

      // select
      cq.select(from);

      // where
      if (specifications != null) {
          cq.where(specifications.toPredicate(from, cq, qb));
      }

      // group by
      if (input.getGroupByColumns() != null && !input.getGroupByColumns().isEmpty()) {
          final List<Expression<?>> groupByList = new ArrayList<Expression<?>>();
          DatatableHelper.getExpressions(from, input.getGroupByColumns(), groupByList);
          cq.groupBy(groupByList);
      }

      // order by
      if (pageable != null && pageable.getSort() != null) {
          cq.orderBy(DatatableHelper.getOrderBy(from, qb, pageable));
      }

      // page limit
      final TypedQuery<T> q = entityManager.createQuery(cq);
      if (pageable != null) {
          q.setFirstResult(pageable.getOffset());
          q.setMaxResults(pageable.getPageSize());
      }

      // execute query
      final List<R> ret = (List<R>) q.getResultList();
      entityManager.close();
return ret;
  }
 
Example 4
Project: datatable-java   File: DatatableDAOImpl.java   Source Code and License Vote up 4 votes
private <R> List<R> findAllImpl2(final DatatableQuery<R, T> input, final Specifications<T> specifications,
      final Pageable pageable) {
      
      // create query
  	final EntityManager entityManager = entityManagerFactory.createEntityManager();
      final CriteriaBuilder qb = entityManager.getCriteriaBuilder();        
      final CriteriaQuery<R> cq = qb.createQuery(input.getQueryClass());

      // Etablir entité racine
      final Root<T> from = cq.from(this.entity);
      
      // select for custom class
      final List<Selection<?>> selectList = new ArrayList<Selection<?>>();
      if (input.getGroupByColumns() != null) {
          DatatableHelper.getExpressions(from, input.getGroupByColumns(), selectList);
      } else {
          DatatableHelper.getExpressions(from, input.getColumns(), selectList);
      }
      cq.multiselect(selectList);

      // where
      if (specifications != null) {
          cq.where(specifications.toPredicate(from, cq, qb));
      }

      // group by
      if (input.getGroupByColumns() != null && !input.getGroupByColumns().isEmpty()) {
          final List<Expression<?>> groupByList = new ArrayList<Expression<?>>();
          DatatableHelper.getExpressions(from, input.getGroupByColumns(), groupByList);
          cq.groupBy(groupByList);
      }

      // order by
      if (pageable != null && pageable.getSort() != null) {
          cq.orderBy(DatatableHelper.getOrderBy(from, qb, pageable));
      }

      // page limit
      final TypedQuery<R> q = entityManager.createQuery(cq);
      if (pageable != null) {
      	LOGGER.log(Level.FINE, "Pageable: offset: {0}, page size: {1}", new Object[]{pageable.getOffset(), pageable.getPageSize()});
          q.setFirstResult(pageable.getOffset());
          q.setMaxResults(pageable.getPageSize());
      }

      // execute query
      final List<R> ret = q.getResultList();
      entityManager.close();
return ret;
  }