@SuppressWarnings("rawtypes") private static Expression getCountQuery(CriteriaQuery<?> query, CriteriaBuilder builder, Root<?> root) { return query.isDistinct() ? builder.countDistinct(root) : builder.count(root); } }
/** * Creates a new count query for the given {@link Specification}. * * @param spec can be {@literal null}. * @param domainClass must not be {@literal null}. * @return */ protected <S extends T> TypedQuery<Long> getCountQuery(@Nullable Specification<S> spec, Class<S> domainClass) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> query = builder.createQuery(Long.class); Root<S> root = applySpecificationToCriteria(spec, domainClass, query); if (query.isDistinct()) { query.select(builder.countDistinct(root)); } else { query.select(builder.count(root)); } // Remove all Orders the Specifications might have applied query.orderBy(Collections.<Order> emptyList()); return em.createQuery(query); }
myResourceTableRoot = myResourceTableQuery.from(ResourceTable.class); if (theCount) { outerQuery.multiselect(myBuilder.countDistinct(myResourceTableRoot)); } else { outerQuery.multiselect(myResourceTableRoot.get("myId").as(Long.class)); myResourceTableRoot = myResourceTableQuery.from(ResourceTable.class); if (theCount) { outerQuery.multiselect(myBuilder.countDistinct(myResourceTableRoot)); } else { outerQuery.multiselect(myResourceTableRoot.get("myId").as(Long.class));
CriteriaBuilder critBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Long> critQuery = criteriaBuilder.createQuery(Long.class); Root<Foo> root = critQuery.from(Foo.class); critQuery.select(critBuilder.countDistinct(root)); int count = entityManager.createQuery(critQuery).getSingleResult().intValue();
CriteriaBuilder cb = this.em.getCriteriaBuilder(); CriteriaQuery<Long> c = builder.createQuery(Long.class);//the query returns a long, and not Orders Root<Order> order = c.from( Order.class ); //c.select(cb.countDistinct(order));//and this is the code you were looking for c.select(cb.countDistinct(order.get("orderID")));//for counting distinct fields other than the primary key Path<String> customerID = order.get( "customerID" ); c.where( cb.equal( customerID, theId ) );
CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Long> countCriteriaQuery = builder.createQuery( Long.class ); countCriteriaQuery.select( builder.countDistinct( countQuery.from( MyClass.class ) ) ); TypedQuery<Long> countQuery = entityManager.createQuery( countCriteriaQuery ); int totalObjectsNumber = countQuery.getSingleResult().longValue();
@Override public <R> Selection<Long> toSelection(CriteriaQuery<R> query, CriteriaBuilder builder, Path<? extends P> path) { return builder.countDistinct(path.get(attribute)); } }
@Override protected CriteriaQuery<Object> complete(Predicate predicate, Sort sort, CriteriaQuery<Object> query, CriteriaBuilder builder, Root<?> root) { CriteriaQuery<Object> select = query.select(query.isDistinct() ? builder.countDistinct(root) : builder.count(root)); return predicate == null ? select : select.where(predicate); } }
@Override public int count( MetadataAuditQuery query ) { CriteriaBuilder builder = getCurrentSession().getCriteriaBuilder(); CriteriaQuery<Long> criteriaQuery = builder.createQuery( Long.class ); Root<MetadataAudit> root = criteriaQuery.from( MetadataAudit.class ); criteriaQuery.select( builder.countDistinct( root.get( "id" ) ) ); criteriaQuery.where( buildCriteria( builder, root, query ).toArray( new Predicate[0] ) ); return getCurrentSession().createQuery( criteriaQuery ).getSingleResult().intValue(); }
@SuppressWarnings("rawtypes") private static Expression getCountQuery(CriteriaQuery<?> query, CriteriaBuilder builder, Root<?> root) { return query.isDistinct() ? builder.countDistinct(root) : builder.count(root); } }
@Override public int count( DeletedObjectQuery query ) { CriteriaBuilder builder = getCurrentSession().getCriteriaBuilder(); CriteriaQuery<Long> criteriaQuery = builder.createQuery( Long.class ); Root<DeletedObject> root = criteriaQuery.from( DeletedObject.class ); Predicate predicate = buildCriteria( builder, root, query ); criteriaQuery.select( builder.countDistinct( root ) ); if ( !predicate.getExpressions().isEmpty() ) criteriaQuery.where( predicate ); Query<Long> typedQuery = getCurrentSession().createQuery( criteriaQuery ); return typedQuery.getSingleResult().intValue(); }
private static Predicate buildCountPredicateIfNecessary(Predicate inPredicate, CriteriaBuilder criteriaBuilder, AbstractQuery<?> query, PathResolver pathResolver) { Entry<String, Long> fieldAndCount = Alias.getFieldAndCount(inPredicate); if (fieldAndCount.getValue() > 1) { Expression<?> join = pathResolver.get(pathResolver.join(fieldAndCount.getKey())); Predicate countPredicate = criteriaBuilder.equal(criteriaBuilder.countDistinct(join), fieldAndCount.getValue()); Alias.setHaving(inPredicate, countPredicate); groupByIfNecessary(query, pathResolver.get(fieldAndCount.getKey())); return countPredicate; } return null; }
@Override protected void prepareSelect(CriteriaQuery<Long> criteriaQuery, Root<T> root, QueryConfig config) { if (config.isDistinct()) { criteriaQuery.select(getCriteriaBuilder().countDistinct(root)); } else { criteriaQuery.select(getCriteriaBuilder().count(root)); } } }
@Sessional @Override public int count(Project project, User user, io.onedev.server.search.entity.EntityCriteria<Build> buildCriteria) { CriteriaBuilder builder = getSession().getCriteriaBuilder(); CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class); Root<Build> root = criteriaQuery.from(Build.class); QueryBuildContext<Build> context = new BuildQueryBuildContext(root, builder); criteriaQuery.where(getPredicates(buildCriteria, project, context, user)); criteriaQuery.select(builder.countDistinct(root)); return getSession().createQuery(criteriaQuery).uniqueResult().intValue(); }
@Override public int getCount() { CriteriaBuilder builder = getCriteriaBuilder(); return getCount( builder, newJpaParameters().count( root -> builder.countDistinct( root.get( "id" ) ) ) ).intValue(); }
@Sessional @Override public int count(Project project, PullRequest request, User user, io.onedev.server.search.entity.EntityCriteria<CodeComment> commentCriteria) { CriteriaBuilder builder = getSession().getCriteriaBuilder(); CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class); Root<CodeComment> root = criteriaQuery.from(CodeComment.class); QueryBuildContext<CodeComment> context = new CodeCommentQueryBuildContext(root, builder); criteriaQuery.where(getPredicates(commentCriteria, project, request, context, user)); criteriaQuery.select(builder.countDistinct(root)); return getSession().createQuery(criteriaQuery).uniqueResult().intValue(); }
@Sessional @Override public int count(Project targetProject, User user, io.onedev.server.search.entity.EntityCriteria<PullRequest> requestCriteria) { CriteriaBuilder builder = getSession().getCriteriaBuilder(); CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class); Root<PullRequest> root = criteriaQuery.from(PullRequest.class); QueryBuildContext<PullRequest> context = new PullRequestQueryBuildContext(root, builder); criteriaQuery.where(getPredicates(requestCriteria, targetProject, user, context)); criteriaQuery.select(builder.countDistinct(root)); return getSession().createQuery(criteriaQuery).uniqueResult().intValue(); }
@Override public int getCount() { CriteriaBuilder builder = getCriteriaBuilder(); JpaQueryParameters<T> param = new JpaQueryParameters<T>() .addPredicates( getSharingPredicates( builder ) ) .count( root -> builder.countDistinct( root.get( "id" ) ) ); return getCount( builder, param ).intValue(); }
@Override public int getTrackedEntityInstanceAuditsCount( TrackedEntityInstanceAuditQueryParams params ) { CriteriaBuilder builder = getCriteriaBuilder(); return getCount( builder, newJpaParameters() .addPredicates( getTrackedEntityInstanceAuditPredicates( params, builder ) ) .count( root -> builder.countDistinct( root.get( "id" ) ) ) ).intValue(); }
@Override public int getCountGeCreated( Date created ) { CriteriaBuilder builder = getCriteriaBuilder(); JpaQueryParameters<T> param = new JpaQueryParameters<T>() .addPredicates( getSharingPredicates( builder ) ) .addPredicate( root -> builder.greaterThanOrEqualTo( root.get( "created" ), created ) ) .count( root -> builder.countDistinct( root.get( "id" ) ) ); return getCount( builder, param ).intValue(); }