@Override public List<Depot> usableDepotFor(BiFunction<CriteriaBuilder, Root<UsageStock>, Predicate> condition) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Depot> cq = cb.createQuery(Depot.class); Root<UsageStock> root = cq.from(UsageStock.class); return entityManager.createQuery(cq .select(root.get(UsageStock_.depot)) .groupBy(root.get(UsageStock_.depot)) .having(condition == null ? cb.conjunction() : condition.apply(cb, root)) .distinct(true) ) .getResultList(); }
predicates.add(tagEntityJoin.in(tags)); cq.groupBy(root.get(CommandEntity_.id)); cq.having(cb.equal(cb.count(root.get(CommandEntity_.id)), tags.size()));
predicates.add(tagEntityJoin.in(tags)); cq.groupBy(root.get(ClusterEntity_.id)); cq.having(cb.equal(cb.count(root.get(ClusterEntity_.id)), tags.size()));
predicates.add(tagEntityJoin.in(tags)); cq.groupBy(root.get(ApplicationEntity_.id)); cq.having(cb.equal(cb.count(root.get(ApplicationEntity_.id)), tags.size()));
if (ArrayUtils.isNotEmpty(havingPredicates)) { Predicate having = criteriaBuilder.and(havingPredicates); select.having(having);
/** * Copy Criteria without Selection * * @param from source Criteria * @param to destination Criteria */ public static void copyCriteriaNoSelection(CriteriaQuery<?> from, CriteriaQuery<?> to) { // Copy Roots for (Root<?> root : from.getRoots()) { Root<?> dest = to.from(root.getJavaType()); dest.alias(getOrCreateAlias(root)); copyJoins(root, dest); } if (from.getGroupList() != null) to.groupBy(from.getGroupList()); to.distinct(from.isDistinct()); if (from.getGroupRestriction() != null) to.having(from.getGroupRestriction()); if (from.getRestriction() != null) to.where(from.getRestriction()); if (from.getOrderList() != null) to.orderBy(from.getOrderList()); }