/** * {@link Specification} for retrieving {@link Target}s that don't have the * given distribution set in their action history * * @param distributionSetId * the ID of the distribution set which must not be assigned * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> hasNotDistributionSetInActions(final Long distributionSetId) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, JpaAction> actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.distributionSet).get(JpaDistributionSet_.id), distributionSetId)); return cb.isNull(actionsJoin.get(JpaAction_.id)); }; }
@Override public Specification<MainOrder> specification() { return (root, query, cb) -> { Predicate predicate = cb.equal(unitJoin.type(), HaierOrder.class); if (!StringUtils.isEmpty(mobile)) predicate = cb.and(predicate, cb.like(Customer.getMobile(MainOrder.getCustomer(root)) , "%" + mobile + "%")); if (depotId != null) { predicate = cb.and(predicate, cb.equal(unitJoin.get("origin").get("id"), depotId)); } if (!StringUtils.isEmpty(productCode)) { root.fetch(MainOrder_.amounts); predicate = cb.and(predicate , cb.equal(root.join(MainOrder_.amounts).key().get(MainGood_.product).get(Product_.code) , productCode)); } if (orderDate != null) { predicate = cb.and(predicate, JpaFunctionUtils.dateEqual(cb, root.get("orderTime"), orderDate)); } return predicate; }; } };
/** * Correlates a join to a List-valued association or element collection in * the enclosing query to a join object of the subquery and returns the * subquery join object. * * @param parentList * join target of the containing query * @return subquery join */ public <X, Y> ListJoin<X, Y> correlate(ListJoin<X, Y> parentCollection){ this.correlatedJoins.add(parentCollection); return new ListJoinImpl(parentCollection.getParentPath(), metamodel.managedType(parentCollection.getModel().getBindableJavaType()), metamodel, parentCollection.getJavaType(), internalCorrelate((FromImpl) parentCollection), parentCollection.getModel(), parentCollection.getJoinType(), (FromImpl) parentCollection); }
public <T> List<Predicate> byExampleOnXToMany(ManagedType<T> mt, Root<T> mtPath, T mtValue, SearchParameters sp, CriteriaBuilder builder) { List<Predicate> predicates = newArrayList(); for (PluralAttribute<? super T, ?, ?> pa : mt.getPluralAttributes()) { if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) { List<?> values = (List<?>) jpaUtil.getValue(mtValue, mt.getAttribute(pa.getName())); if (values != null && !values.isEmpty()) { if (sp.getUseAndInXToMany()) { if (values.size() > 3) { log.warn("Please note that using AND restriction on an Many to Many relationship requires as many joins as values"); } for (Object value : values) { ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName())); predicates.add(join.in(value)); } } else { ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName())); predicates.add(join.in(values)); } } } } return predicates; } }
attributes.get(LocalAccountPersonAttributeImpl_.name), nameParam), cb.like(cb.lower(attributeValues.as(String.class)), valueParam)));
/** * {@link Specification} for retrieving {@link Target}s that don't have the * given distribution set in their action history * * @param distributionSetId * the ID of the distribution set which must not be assigned * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> hasNotDistributionSetInActions(final Long distributionSetId) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, JpaAction> actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.distributionSet).get(JpaDistributionSet_.id), distributionSetId)); return cb.isNull(actionsJoin.get(JpaAction_.id)); }; }
/** * Construct a join predicate on collection (eg many to many, List) */ public <T> List<Predicate> byExampleOnXToMany(ManagedType<T> mt, Root<T> mtPath, T mtValue, SearchParameters sp, CriteriaBuilder builder) { List<Predicate> predicates = newArrayList(); for (PluralAttribute<? super T, ?, ?> pa : mt.getPluralAttributes()) { if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) { List<?> values = (List<?>) jpaUtil.getValue(mtValue, mt.getAttribute(pa.getName())); if (values != null && !values.isEmpty()) { if (sp.getUseAndInXToMany()) { if (values.size() > 3) { log.warn("Please note that using AND restriction on an Many to Many relationship requires as many joins as values"); } for (Object value : values) { ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName())); predicates.add(join.in(value)); } } else { ListJoin<T, ?> join = mtPath.join(mt.getList(pa.getName())); predicates.add(join.in(values)); } } } } return predicates; } }
attributes.get(LocalAccountPersonAttributeImpl_.name), nameParam), cb.like(cb.lower(attributeValues.as(String.class)), valueParam)));
builder.equal( busAdmins.get(OrganizationalEntityImpl_.id), userId ), busAdmins.get(OrganizationalEntityImpl_.id).in(groupIds) ) ); predicates.add( builder.or( builder.equal( potOwners.get(OrganizationalEntityImpl_.id), userId ), potOwners.get(OrganizationalEntityImpl_.id).in(groupIds) ) ); predicates.add( builder.or( builder.equal( stakeHols.get(OrganizationalEntityImpl_.id), userId ), stakeHols.get(OrganizationalEntityImpl_.id).in(groupIds) ) );
/** * {@link Specification} for retrieving {@link Target}s that have no Action * of the {@link RolloutGroup}. * * @param group * the {@link RolloutGroup} * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> hasNoActionInRolloutGroup(final Long group) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, RolloutTargetGroup> rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.INNER); rolloutTargetJoin.on( cb.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), group)); final ListJoin<JpaTarget, JpaAction> actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.rolloutGroup).get(JpaRolloutGroup_.id), group)); return cb.isNull(actionsJoin.get(JpaAction_.id)); }; }
/** * @param assignedTargetId * the targetID which is assigned to a distribution set to search * for. * @return the specification to search for a distribution set which is * assigned to the given targetId */ public static Specification<JpaDistributionSet> assignedTarget(final String assignedTargetId) { return (dsRoot, query, cb) -> { final ListJoin<JpaDistributionSet, JpaTarget> assignedTargetJoin = dsRoot .join(JpaDistributionSet_.assignedToTargets, JoinType.INNER); return cb.equal(assignedTargetJoin.get(JpaTarget_.controllerId), assignedTargetId); }; }
/** * {@link Specification} for retrieving {@link Target}s that have no Action * of the {@link RolloutGroup}. * * @param group * the {@link RolloutGroup} * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> hasNoActionInRolloutGroup(final Long group) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, RolloutTargetGroup> rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.INNER); rolloutTargetJoin.on( cb.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), group)); final ListJoin<JpaTarget, JpaAction> actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.rolloutGroup).get(JpaRolloutGroup_.id), group)); return cb.isNull(actionsJoin.get(JpaAction_.id)); }; }
/** * @param assignedTargetId * the targetID which is assigned to a distribution set to search * for. * @return the specification to search for a distribution set which is * assigned to the given targetId */ public static Specification<JpaDistributionSet> assignedTarget(final String assignedTargetId) { return (dsRoot, query, cb) -> { final ListJoin<JpaDistributionSet, JpaTarget> assignedTargetJoin = dsRoot .join(JpaDistributionSet_.assignedToTargets, JoinType.INNER); return cb.equal(assignedTargetJoin.get(JpaTarget_.controllerId), assignedTargetId); }; }
/** * {@link Specification} for retrieving {@link Target}s that are not in the * given {@link RolloutGroup}s * * @param groups * the {@link RolloutGroup}s * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> isNotInRolloutGroups(final Collection<Long> groups) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, RolloutTargetGroup> rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.LEFT); final Predicate inRolloutGroups = rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup) .get(JpaRolloutGroup_.id).in(groups); rolloutTargetJoin.on(inRolloutGroups); return cb.isNull(rolloutTargetJoin.get(RolloutTargetGroup_.target)); }; }
/** * @param installedTargetId * the targetID which is installed to a distribution set to * search for. * @return the specification to search for a distribution set which is * installed to the given targetId */ public static Specification<JpaDistributionSet> installedTarget(final String installedTargetId) { return (dsRoot, query, cb) -> { final ListJoin<JpaDistributionSet, JpaTarget> installedTargetJoin = dsRoot .join(JpaDistributionSet_.installedAtTargets, JoinType.INNER); return cb.equal(installedTargetJoin.get(JpaTarget_.controllerId), installedTargetId); }; }
/** * {@link Specification} for retrieving {@link Target}s that are not in the * given {@link RolloutGroup}s * * @param groups * the {@link RolloutGroup}s * @return the {@link Target} {@link Specification} */ public static Specification<JpaTarget> isNotInRolloutGroups(final Collection<Long> groups) { return (targetRoot, query, cb) -> { final ListJoin<JpaTarget, RolloutTargetGroup> rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.LEFT); final Predicate inRolloutGroups = rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup) .get(JpaRolloutGroup_.id).in(groups); rolloutTargetJoin.on(inRolloutGroups); return cb.isNull(rolloutTargetJoin.get(RolloutTargetGroup_.target)); }; }
/** * @param installedTargetId * the targetID which is installed to a distribution set to * search for. * @return the specification to search for a distribution set which is * installed to the given targetId */ public static Specification<JpaDistributionSet> installedTarget(final String installedTargetId) { return (dsRoot, query, cb) -> { final ListJoin<JpaDistributionSet, JpaTarget> installedTargetJoin = dsRoot .join(JpaDistributionSet_.installedAtTargets, JoinType.INNER); return cb.equal(installedTargetJoin.get(JpaTarget_.controllerId), installedTargetId); }; }
public static Specification<TaskData> hasProperty(TaskProperty taskProperty) { return (root, query, cb) -> { final ListJoin<TaskData, TaskPropertyData> join = root.join(TaskData_.properties); final Path<String> stringPath = root.get(TaskData_.state); return cb.and( cb.equal(join.get(TaskPropertyData_.name), taskProperty.name()), cb.equal(join.get(TaskPropertyData_.value), taskProperty.value()) ); }; }
@Override public Page<TargetWithActionStatus> findAllTargetsOfRolloutGroupWithActionStatus(final Pageable pageRequest, final long rolloutGroupId) { throwExceptionIfRolloutGroupDoesNotExist(rolloutGroupId); final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery<Object[]> query = cb.createQuery(Object[].class); final CriteriaQuery<Long> countQuery = cb.createQuery(Long.class); final Root<RolloutTargetGroup> targetRoot = query.distinct(true).from(RolloutTargetGroup.class); final Join<RolloutTargetGroup, JpaTarget> targetJoin = targetRoot.join(RolloutTargetGroup_.target); final ListJoin<RolloutTargetGroup, JpaAction> actionJoin = targetRoot.join(RolloutTargetGroup_.actions, JoinType.LEFT); final Root<RolloutTargetGroup> countQueryFrom = countQuery.distinct(true).from(RolloutTargetGroup.class); countQueryFrom.join(RolloutTargetGroup_.target); countQueryFrom.join(RolloutTargetGroup_.actions, JoinType.LEFT); countQuery.select(cb.count(countQueryFrom)).where(cb .equal(countQueryFrom.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), rolloutGroupId)); final Long totalCount = entityManager.createQuery(countQuery).getSingleResult(); final CriteriaQuery<Object[]> multiselect = query.multiselect(targetJoin, actionJoin.get(JpaAction_.status)) .where(cb.equal(targetRoot.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), rolloutGroupId)); final List<TargetWithActionStatus> targetWithActionStatus = entityManager.createQuery(multiselect) .setFirstResult(pageRequest.getOffset()).setMaxResults(pageRequest.getPageSize()).getResultList() .stream().map(o -> new TargetWithActionStatus((Target) o[0], (Action.Status) o[1])) .collect(Collectors.toList()); return new PageImpl<>(targetWithActionStatus, pageRequest, totalCount); }