Java 类javax.persistence.criteria.JoinType 实例源码

项目:BecomeJavaHero    文件:App8.java   
public static void main(String[] args) {
    EntityManagerFactory entityManagerFactory = Persistence
            .createEntityManagerFactory("pl.edu.bogdan.training.db.entity");
    EntityManager em = entityManagerFactory.createEntityManager();

    em.getTransaction().begin();

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<User> cq = cb.createQuery(User.class);
    Root<User> from = cq.from(User.class);
    Join<User, Role> join = from.join("role", JoinType.LEFT);
    cq.where(cb.equal(join.get("name"), "ordinary"));
    TypedQuery<User> tq = em.createQuery(cq);
    List<User> users = tq.getResultList();
    for (User u : users) {
        System.out.println(u.getLastName());
    }

    em.getTransaction().commit();
    em.close();
    entityManagerFactory.close();
}
项目:oma-riista-web    文件:PublicHarvestSeasonFeature.java   
private Map<Long, Integer> fetchUsedQuotas() {
    final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    final CriteriaQuery<Tuple> query = builder.createTupleQuery();
    final Root<HarvestReport> root = query.from(HarvestReport.class);

    Join<Harvest, HarvestQuota> joinedQuotas = root.join(HarvestReport_.harvests).join(Harvest_.harvestQuota, JoinType.LEFT);
    Path<Long> quotaId = joinedQuotas.get(HarvestQuota_.id);

    Expression<Long> count = builder.count(root.get(HarvestReport_.id));

    Predicate onlyApproved = builder.equal(root.get(HarvestReport_.state), HarvestReport.State.APPROVED);
    Predicate quotaNotNull = builder.isNotNull(quotaId);

    CriteriaQuery<Tuple> q = query
            .multiselect(quotaId, count)
            .where(onlyApproved, quotaNotNull)
            .groupBy(quotaId);
    return map(entityManager.createQuery(q).getResultList());
}
项目:oma-riista-web    文件:ContactSearchFeature.java   
private static Predicate createPredicate(Root<Occupation> root, CriteriaBuilder cb, OccupationContactSearchDTO dto) {
    final List<Predicate> predicates = Lists.newArrayList();

    final Join<Occupation, Organisation> organisationJoin = root.join(Occupation_.organisation, JoinType.LEFT);

    predicates.add(validNow(root, cb));
    predicates.add(byOrgType(cb, organisationJoin, dto.getOrganisationType()));
    if (dto.getAreaCode() != null) {
        predicates.add(byArea(cb, organisationJoin, dto.getAreaCode()));
    }
    if (dto.getRhyCode() != null) {
        predicates.add(cb.equal(organisationJoin.get(Organisation_.officialCode), dto.getRhyCode()));
    }
    if (dto.getOccupationType() != null) {
        predicates.add(cb.equal(root.get(Occupation_.occupationType), dto.getOccupationType()));
    }

    return cb.and(toArray(predicates));
}
项目:mycore    文件:MCRUserManager.java   
private static Optional<MCRUser> getByNaturalID(EntityManager em, String userName, String realmId) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<MCRUser> query = cb.createQuery(MCRUser.class);
    Root<MCRUser> users = query.from(MCRUser.class);
    users.fetch(MCRUser_.owner.getName(), JoinType.LEFT);
    try {
        return Optional
            .of(em
                .createQuery(query
                    .distinct(true)
                    .where(getUserRealmCriterion(cb, users, userName, realmId)))
                .getSingleResult());
    } catch (NoResultException e) {
        return Optional.empty();
    }
}
项目:4mila-1.0    文件:RegistrationsOutlineService.java   
@Override
public Object[][] getEntryCourseTableData(SearchFilter filter) throws ProcessingException {
  Long eventNr = ((SingleEventSearchFormData) filter.getFormData()).getEvent().getValue();

  CriteriaBuilder b = JPA.getCriteriaBuilder();
  CriteriaQuery<Object[]> selectQuery = b.createQuery(Object[].class);
  Root<RtCourse> course = selectQuery.from(RtCourse.class);
  Join<RtCourse, RtEventClass> joinEventClasses = course.join(RtCourse_.rtEventClasses, JoinType.LEFT);
  Join<RtEventClass, RtRace> joinRaces = joinEventClasses.join(RtEventClass_.rtRaces, JoinType.LEFT);

  selectQuery.select(b.array(course.get(RtCourse_.id).get(RtCourseKey_.courseNr), course.get(RtCourse_.shortcut), b.countDistinct(joinRaces.get(RtRace_.entryNr)), b.countDistinct(joinRaces.get(RtRace_.id).get(RtRaceKey_.raceNr)))).where(eventNr != null ? b.equal(joinRaces.get(RtRace_.eventNr), eventNr) : b.conjunction()).groupBy(course.get(RtCourse_.id).get(RtCourseKey_.courseNr), course.get(RtCourse_.shortcut));

  List<Object[]> list = JPA.createQuery(selectQuery).getResultList();

  List<Object[]> result = new ArrayList<>();
  for (Object[] row : list) {
    Object[] resultRow = new Object[5];
    resultRow[0] = 0L; // Force Summary Order to bottom
    resultRow[1] = row[0];
    resultRow[2] = row[1];
    resultRow[3] = row[2];
    resultRow[4] = row[3];
    result.add(resultRow);
  }
  return JPAUtility.convertList2Array(result);
}
项目:4mila-1.0    文件:StartlistService.java   
@Override
public boolean existsRaceWithStartTime(Long[] startlistSettingNrs) throws ProcessingException {
  if (startlistSettingNrs == null || startlistSettingNrs.length == 0) {
    return false;
  }

  CriteriaBuilder b = JPA.getCriteriaBuilder();
  CriteriaQuery<Long> selectQuery = b.createQuery(Long.class);
  Root<RtParticipation> participation = selectQuery.from(RtParticipation.class);
  Join<RtParticipation, RtEventClass> joinEventClass = participation.join(RtParticipation_.rtEventClass, JoinType.INNER);
  Join<RtEventClass, RtCourse> joinCourse = joinEventClass.join(RtEventClass_.rtCourse, JoinType.LEFT);

  selectQuery.select(b.count(participation.get(RtParticipation_.id).get(RtParticipationKey_.clientNr)))
      .where(
          b.and(
              b.isNotNull(participation.get(RtParticipation_.startTime)),
              b.equal(participation.get(RtParticipation_.id).get(RtParticipationKey_.clientNr), ServerSession.get().getSessionClientNr()),
              b.or(joinCourse.get(RtCourse_.startlistSettingNr).in(Arrays.asList(startlistSettingNrs)),
                  joinEventClass.get(RtEventClass_.startlistSettingNr).in(Arrays.asList(startlistSettingNrs)))
              ));
  List<Long> result = JPA.createQuery(selectQuery).getResultList();
  if (result == null || result.isEmpty()) {
    return false;
  }
  return result.get(0) > 0;
}
项目:4mila-1.0    文件:EventsOutlineService.java   
@Override
public List<RtMap> getMapTableData(Long eventNr) throws ProcessingException {
  CriteriaBuilder b = JPA.getCriteriaBuilder();
  CriteriaQuery<RtMap> select = b.createQuery(RtMap.class);
  Root<RtMap> rtmap = select.from(RtMap.class);

  List<Predicate> list = new ArrayList<>();
  Predicate restriction1 = b.equal(rtmap.get(RtMap_.key).get(RtMapKey_.clientNr), ServerSession.get().getSessionClientNr());
  list.add(restriction1);
  if (eventNr != null) {
    Join<RtMap, RtEventMap> joinEventMap = rtmap.join(RtMap_.rtEventMaps, JoinType.LEFT);
    Predicate restriction2 = b.equal(joinEventMap.get(RtEventMap_.id).get(RtEventMapKey_.eventNr), eventNr);
    list.add(restriction2);
  }

  select.where(b.and(list.toArray(new Predicate[list.size()])));

  return JPA.createQuery(select).getResultList();
}
项目:4mila-1.0    文件:EventsOutlineService.java   
@Override
public Object[][] getRankingClassesTableData(Long rankingNr) throws ProcessingException {
  CriteriaBuilder b = JPA.getCriteriaBuilder();
  CriteriaQuery<Object[]> selectQuery = b.createQuery(Object[].class);
  Root<RtRankingEvent> rankingEvent = selectQuery.from(RtRankingEvent.class);
  Join<RtRankingEvent, RtEvent> joinEvent = rankingEvent.join(RtRankingEvent_.rtEvent, JoinType.INNER);
  Join<RtEvent, RtEventClass> joinEventClass = joinEvent.join(RtEvent_.rtEventClasses, JoinType.INNER);

  Subquery<Long> numberOfEventsSubselect = selectQuery.subquery(Long.class);
  Root<RtRankingEvent> subroot = numberOfEventsSubselect.from(RtRankingEvent.class);
  numberOfEventsSubselect.select(b.count(subroot.get(RtRankingEvent_.id).get(RtRankingEventKey_.rankingNr))).where(b.and(b.equal(subroot.get(RtRankingEvent_.id).get(RtRankingEventKey_.rankingNr), rankingNr), b.equal(subroot.get(RtRankingEvent_.id).get(RtRankingEventKey_.clientNr), ServerSession.get().getSessionClientNr())));

  selectQuery.select(b.array(joinEventClass.get(RtEventClass_.id).get(RtEventClassKey_.classUid), b.count(rankingEvent.get(RtRankingEvent_.id).get(RtRankingEventKey_.eventNr)))).where(b.and(b.equal(rankingEvent.get(RtRankingEvent_.id).get(RtRankingEventKey_.rankingNr), rankingNr), b.equal(rankingEvent.get(RtRankingEvent_.id).get(RtRankingEventKey_.clientNr), ServerSession.get().getSessionClientNr()))).groupBy(joinEventClass.get(RtEventClass_.id).get(RtEventClassKey_.classUid)).having(b.equal(b.count(rankingEvent.get(RtRankingEvent_.id).get(RtRankingEventKey_.eventNr)), numberOfEventsSubselect));

  return JPAUtility.convertList2Array(JPA.createQuery(selectQuery).getResultList());
}
项目:4mila-1.0    文件:SettingsOutlineService.java   
@Override
public Object[][] getCityTableData(CitySearchFormData formData) throws ProcessingException {
  CriteriaBuilder b = JPA.getCriteriaBuilder();
  CriteriaQuery<Object[]> selectQuery = b.createQuery(Object[].class);
  Root<RtCity> city = selectQuery.from(RtCity.class);
  Join<RtCity, RtCountry> joinCountry = city.join(RtCity_.rtCountry);
  Join<RtCity, RtAddress> joinAddress = city.join(RtCity_.rtAddresses, JoinType.LEFT);

  JPACityBoxSearchFormDataStatementBuilder builder = new JPACityBoxSearchFormDataStatementBuilder(city);
  builder.build(formData.getCityBox());

  selectQuery.select(b.array(city.get(RtCity_.id).get(RtCityKey_.cityNr), city.get(RtCity_.zip), city.get(RtCity_.name), city.get(RtCity_.areaUid), city.get(RtCity_.region), city.get(RtCity_.countryUid), joinCountry.get(RtCountry_.countryCode), b.count(joinAddress.get(RtAddress_.id).get(RtAddressKey_.addressNr)))).where(b.and(b.equal(city.get(RtCity_.id).get(RtCityKey_.clientNr), ServerSession.get().getSessionClientNr()), builder.getPredicate())).groupBy(city.get(RtCity_.id).get(RtCityKey_.cityNr), city.get(RtCity_.zip), city.get(RtCity_.name), city.get(RtCity_.areaUid), city.get(RtCity_.region), city.get(RtCity_.countryUid), joinCountry.get(RtCountry_.countryCode));

  List<Object[]> result = JPA.createQuery(selectQuery).getResultList();
  return JPAUtility.convertList2Array(result);
}
项目:mojito    文件:DropSpecification.java   
/**
 * A {@link Specification} to filter Drops that have been imported or not.
 *
 * @param imported {@code true} to get Drops that have been imported,
 * {@code false} to get Drops that have not yet been imported
 *
 * @return {@link Specification}
 */
public static SingleParamSpecification<Drop> isImported(final Boolean imported) {
    return new SingleParamSpecification<Drop>(imported) {
        @Override
        public Predicate toPredicate(Root<Drop> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

            Predicate predicate;

            if (imported) {
                predicate = builder.and(builder.isNotNull(root.get(Drop_.lastImportedDate)),
                        builder.or(builder.isNull(root.get(Drop_.importFailed)), builder.isFalse(root.get(Drop_.importFailed))),
                        builder.isNotNull(root.get(Drop_.importPollableTask)),
                        builder.isNotNull(root.join(Drop_.importPollableTask, JoinType.LEFT).get(PollableTask_.finishedDate)));
            } else {
                predicate = builder.or(builder.isNull(root.get(Drop_.lastImportedDate)),
                        builder.isTrue(root.get(Drop_.importFailed)),
                        builder.isNull(root.get(Drop_.importPollableTask)),
                        builder.isNull(root.join(Drop_.importPollableTask, JoinType.LEFT).get(PollableTask_.finishedDate)));
            }

            return predicate;
        }
    };
}
项目:katharsis-framework    文件:QueryFilterBuilder.java   
protected P filterSpecListToPredicate(MetaDataObject rootMeta, F root, FilterSpec fs, JoinType defaultPredicateJoinType) {
    if ((fs.getOperator() == FilterOperator.EQ || fs.getOperator() == FilterOperator.NEQ)
            && fs.getValue() instanceof Collection && ((Collection<?>) fs.getValue()).size() > PARAM_LIMIT_FOR_ORACLE) {

        return filterLargeValueSets(fs, rootMeta, root, defaultPredicateJoinType);
    }
    else {
        if (fs.hasExpressions()) {
            return filterExpressions(fs, rootMeta, root, defaultPredicateJoinType);
        }

        else {
            return filterSimpleOperation(fs, rootMeta);
        }
    }
}
项目:katharsis-framework    文件:QueryFilterBuilder.java   
private P filterExpressions(FilterSpec fs, MetaDataObject rootMeta, F root, JoinType defaultPredicateJoinType) {
    // and, or, not.
    if (fs.getOperator() == FilterOperator.NOT) {
        return backend.not(
                backend.and(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType)));
    }
    else if (fs.getOperator() == FilterOperator.AND) {
        return backend.and(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType));
    }
    else if (fs.getOperator() == FilterOperator.OR) {
        return backend.or(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType));
    }
    else {
        throw new IllegalArgumentException(fs.toString());
    }
}
项目:katharsis-framework    文件:QuerydslQueryBackend.java   
@Override
public Expression<?> doJoin(MetaAttribute targetAttr, JoinType joinType, Expression<?> parent) {
    if (targetAttr instanceof MetaComputedAttribute) {

        MetaComputedAttribute computedAttr = (MetaComputedAttribute) targetAttr;
        QuerydslExpressionFactory expressionFactory = (QuerydslExpressionFactory<?>) queryImpl.getComputedAttrs()
                .get(computedAttr);

        return expressionFactory.getExpression(parent, getQuery());
    }
    else {
        Expression<Object> expression = QuerydslUtils.get(parent, targetAttr.getName());
        querydslQuery.getMetadata().addJoin(QuerydslUtils.convertJoinType(joinType), expression);
        return expression;
    }
}
项目:katharsis-framework    文件:BasicQueryTestBase.java   
@Test
public void testJoinType() {
    // note one entity has no relation
    assertEquals(4,
            builder().setDefaultJoinType(JoinType.INNER)
                    .addSortBy(Arrays.asList(TestEntity.ATTR_oneRelatedValue, RelatedEntity.ATTR_id), Direction.ASC)
                    .buildExecutor().getResultList().size());
    assertEquals(5,
            builder().setDefaultJoinType(JoinType.LEFT)
                    .addSortBy(Arrays.asList(TestEntity.ATTR_oneRelatedValue, RelatedEntity.ATTR_id), Direction.ASC)
                    .buildExecutor().getResultList().size());
    assertEquals(4,
            builder().setJoinType(Arrays.asList(TestEntity.ATTR_oneRelatedValue), JoinType.INNER)
                    .addSortBy(Arrays.asList(TestEntity.ATTR_oneRelatedValue, RelatedEntity.ATTR_id), Direction.ASC)
                    .buildExecutor().getResultList().size());
    assertEquals(5,
            builder().setJoinType(Arrays.asList(TestEntity.ATTR_oneRelatedValue), JoinType.LEFT)
                    .addSortBy(Arrays.asList(TestEntity.ATTR_oneRelatedValue, RelatedEntity.ATTR_id), Direction.ASC)
                    .buildExecutor().getResultList().size());
}
项目:jpasecurity    文件:CriteriaBuilderTest.java   
@Test
public void criteria() {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<ClientEntityBrowserDto> c = cb.createQuery(ClientEntityBrowserDto.class);
    Root<Client> client = c.from(Client.class);

    Join<Client, ClientGroup> clientGroup = client.join("group", JoinType.LEFT);
    Join<Client, ClientStructure> clientStructure = client.join("structure", JoinType.LEFT);
    Join<ClientType, ClientTypeGroup> clientTypeGroup
        = client.join("type", JoinType.LEFT).join("clientTypeGroup", JoinType.LEFT);

    Selection<ClientEntityBrowserDto> selection
        = cb.construct(ClientEntityBrowserDto.class,
                       client.<Integer>get("id"),
                       client.<String>get("number"),
                       client.<String>get("name"),
                       clientTypeGroup.<String>get("name"),
                       clientGroup.<String>get("name"),
                       clientStructure.<String>get("name"));

    c.select(selection);
    c.distinct(true);
    TypedQuery<ClientEntityBrowserDto> query = entityManager.createQuery(c);
    assertTrue(query.getResultList().isEmpty());
}
项目:dhis2-core    文件:HibernateGenericStore.java   
@Override
@SuppressWarnings( "unchecked" )
public List<T> getAllByAttributes( List<Attribute> attributes )
{
    Schema schema = schemaService.getDynamicSchema( getClazz() );

    if ( schema == null || !schema.havePersistedProperty( "attributeValues" ) || attributes.isEmpty() )
    {
        return new ArrayList<>();
    }

    query = getCriteriaQuery();

    Root root = query.from( getClazz() );
    Join joinAttributeValue = root.join( ("attributeValues"), JoinType.INNER );
    query.select( root );
    query.where( joinAttributeValue.get( "attribute" ).in( attributes ) );

    return sessionFactory.getCurrentSession().createQuery( query ).list();
}
项目:dhis2-core    文件:HibernateGenericStore.java   
@Override
@SuppressWarnings( "unchecked" )
public List<AttributeValue> getAttributeValueByAttribute( Attribute attribute )
{
    Schema schema = schemaService.getDynamicSchema( getClazz() );

    if ( schema == null || !schema.havePersistedProperty( "attributeValues" ) )
    {
        return new ArrayList<>();
    }

    query = getCriteriaQuery();

    Root root = query.from( getClazz() );
    Join joinAttributeValue = root.join( ("attributeValues"), JoinType.INNER );
    query.select( root.get( "attributeValues" ) );
    query.where( builder.equal( joinAttributeValue.get( "attribute" ), attribute ) );

    return sessionFactory.getCurrentSession().createQuery( query ).list();
}
项目:dhis2-core    文件:HibernateGenericStore.java   
@Override
@SuppressWarnings( "unchecked" )
public List<AttributeValue> getAttributeValueByAttributeAndValue( Attribute attribute, String value )
{
    Schema schema = schemaService.getDynamicSchema( getClazz() );

    if ( schema == null || !schema.havePersistedProperty( "attributeValues" ) )
    {
        return null;
    }

    query = getCriteriaQuery();

    Root root = query.from( getClazz() );
    Join joinAttributeValue = root.join( ("attributeValues"), JoinType.INNER );
    query.select( root.get( "attributeValues" ) );
    query.where(
        builder.and(
            builder.equal( joinAttributeValue.get( "attribute" ), attribute ),
            builder.equal( joinAttributeValue.get( "value" ), value ) ) );

    return sessionFactory.getCurrentSession().createQuery( query ).list();
}
项目:hawkbit    文件:JpaDeploymentManagement.java   
@Override
public Page<String> findMessagesByActionStatusId(final Pageable pageable, final Long actionStatusId) {
    final CriteriaBuilder cb = entityManager.getCriteriaBuilder();

    final CriteriaQuery<Long> countMsgQuery = cb.createQuery(Long.class);
    final Root<JpaActionStatus> countMsgQueryFrom = countMsgQuery.distinct(true).from(JpaActionStatus.class);
    final ListJoin<JpaActionStatus, String> cJoin = countMsgQueryFrom.joinList("messages", JoinType.LEFT);
    countMsgQuery.select(cb.count(cJoin))
            .where(cb.equal(countMsgQueryFrom.get(JpaActionStatus_.id), actionStatusId));
    final Long totalCount = entityManager.createQuery(countMsgQuery).getSingleResult();

    final CriteriaQuery<String> msgQuery = cb.createQuery(String.class);
    final Root<JpaActionStatus> as = msgQuery.from(JpaActionStatus.class);
    final ListJoin<JpaActionStatus, String> join = as.joinList("messages", JoinType.LEFT);
    final CriteriaQuery<String> selMsgQuery = msgQuery.select(join);
    selMsgQuery.where(cb.equal(as.get(JpaActionStatus_.id), actionStatusId));

    final List<String> result = entityManager.createQuery(selMsgQuery).setFirstResult(pageable.getOffset())
            .setMaxResults(pageable.getPageSize()).getResultList().stream().collect(Collectors.toList());

    return new PageImpl<>(result, pageable, totalCount);
}
项目:hibernate-semantic-query    文件:AbstractFromImpl.java   
@Override
    public <Y> JpaFetch<X, Y> fetch(PluralAttribute<? super X, ?, Y> pluralAttribute, JoinType jt) {
//      if ( !canBeFetchSource() ) {
//          throw illegalFetch();
//      }
//
//      final Fetch<X, Y> fetch;
//      // TODO : combine Fetch and Join hierarchies (JoinImplementor extends Join,Fetch???)
//      if ( PluralAttribute.CollectionType.COLLECTION.equals( pluralAttribute.getCollectionType() ) ) {
//          fetch = constructJoin( (CollectionAttribute<X, Y>) pluralAttribute, jt );
//      }
//      else if ( PluralAttribute.CollectionType.LIST.equals( pluralAttribute.getCollectionType() ) ) {
//          fetch = constructJoin( (ListAttribute<X, Y>) pluralAttribute, jt );
//      }
//      else if ( PluralAttribute.CollectionType.SET.equals( pluralAttribute.getCollectionType() ) ) {
//          fetch = constructJoin( (SetAttribute<X, Y>) pluralAttribute, jt );
//      }
//      else {
//          fetch = constructJoin( (MapAttribute<X, ?, Y>) pluralAttribute, jt );
//      }
//      joinScope.addFetch( fetch );
//      return fetch;

        throw new NotYetImplementedException(  );
    }
项目:blcdemo    文件:ProductCustomPersistenceHandler.java   
@Override
public DynamicResultSet fetch(PersistencePackage persistencePackage, CriteriaTransferObject cto, DynamicEntityDao
        dynamicEntityDao, RecordHelper helper) throws ServiceException {
    cto.getNonCountAdditionalFilterMappings().add(new FilterMapping()
            .withDirectFilterValues(new EmptyFilterValues())
            .withRestriction(new Restriction()
                            .withPredicateProvider(new PredicateProvider() {
                                public Predicate buildPredicate(CriteriaBuilder builder,
                                                                FieldPathBuilder fieldPathBuilder, From root,
                                                                String ceilingEntity,
                                                                String fullPropertyName, Path explicitPath,
                                                                List directValues) {
                                    root.fetch("defaultSku", JoinType.LEFT);
                                    root.fetch("defaultCategory", JoinType.LEFT);
                                    return null;
                                }
                            })
            ));
    return helper.getCompatibleModule(OperationType.BASIC).fetch(persistencePackage, cto);
}
项目:FHIR-Server    文件:BaseFhirResourceDao.java   
private Predicate createCompositeParamPart(CriteriaBuilder builder, Root<ResourceTable> from, RuntimeSearchParam left, IQueryParameterType leftValue) {
    Predicate retVal = null;
    switch (left.getParamType()) {
    case STRING: {
        From<ResourceIndexedSearchParamString, ResourceIndexedSearchParamString> stringJoin = from.join("myParamsString", JoinType.INNER);
        retVal = createPredicateString(leftValue, left.getName(), builder, stringJoin);
        break;
    }
    case TOKEN: {
        From<ResourceIndexedSearchParamToken, ResourceIndexedSearchParamToken> tokenJoin = from.join("myParamsToken", JoinType.INNER);
        retVal = createPredicateToken(leftValue, left.getName(), builder, tokenJoin);
        break;
    }
    case DATE: {
        From<ResourceIndexedSearchParamDate, ResourceIndexedSearchParamDate> dateJoin = from.join("myParamsDate", JoinType.INNER);
        retVal = createPredicateDate(builder, dateJoin, leftValue);
        break;
    }
    }

    if (retVal == null) {
        throw new InvalidRequestException("Don't know how to handle composite parameter with type of " + left.getParamType());
    }

    return retVal;
}
项目:jpasearch    文件:JpaUtil.java   
@SuppressWarnings("unchecked")
public <E, F> Path<F> getPath(Root<E> root, List<Attribute<?, ?>> attributes) {
    Path<?> path = root;
    for (Attribute<?, ?> attribute : attributes) {
        boolean found = false;
        if (path instanceof FetchParent) {
            for (Fetch<E, ?> fetch : ((FetchParent<?, E>) path).getFetches()) {
                if (attribute.getName().equals(fetch.getAttribute().getName()) && (fetch instanceof Join<?, ?>)) {
                    path = (Join<E, ?>) fetch;
                    found = true;
                    break;
                }
            }
        }
        if (!found) {
            if ((attributes.indexOf(attribute) != (attributes.size() - 1)) && (attribute instanceof Bindable)
                    && Identifiable.class.isAssignableFrom(((Bindable<?>) attribute).getBindableJavaType()) && (path instanceof From)) {
                path = ((From<?, ?>) path).join(attribute.getName(), JoinType.LEFT);
            } else {
                path = path.get(attribute.getName());
            }
        }
    }
    return (Path<F>) path;
}
项目:jpasearch    文件:JpaUtil.java   
@SuppressWarnings({ "unchecked", "rawtypes" })
public <E> void fetches(SearchParameters<E> sp, Root<E> root) {
    for (jpasearch.repository.query.Path<E, ?> path : sp.getFetches()) {
        FetchParent<?, ?> from = root;
        for (Attribute<?, ?> arg : metamodelUtil.toAttributes(root.getJavaType(), path.getPath())) {
            boolean found = false;
            for (Fetch<?, ?> fetch : from.getFetches()) {
                if (arg.equals(fetch.getAttribute())) {
                    from = fetch;
                    found = true;
                    break;
                }
            }
            if (!found) {
                if (arg instanceof PluralAttribute) {
                    from = from.fetch((PluralAttribute) arg, JoinType.LEFT);
                } else {
                    from = from.fetch((SingularAttribute) arg, JoinType.LEFT);
                }
            }
        }
    }
}
项目:nestedj    文件:NestedNodeRetrieverImpl.java   
@Override
public Optional<NestedNodeInfo<N>> getNodeInfo(Long nodeId, Class<N> nodeClass) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<NestedNodeInfo> select = cb.createQuery(NestedNodeInfo.class);
    Root<N> root = select.from(nodeClass);
    Join<N, N> parent = root.join(parent(nodeClass), JoinType.LEFT);
    select.select(
            cb.construct(
                    NestedNodeInfo.class,
                    root.<Long>get(id(nodeClass)),
                    parent.<Long>get(id(nodeClass)),
                    root.<Long>get(left(nodeClass)),
                    root.<Long>get(right(nodeClass)),
                    root.<Long>get(level(nodeClass))
            )
    ).where(cb.equal(root.<Long>get(id(nodeClass)), nodeId));
    try {
        NestedNodeInfo<N> result = em.createQuery(select).getSingleResult();
        result.setNodeClass(nodeClass);
        return Optional.of(result);
    } catch (NoResultException ex) {
        return Optional.<NestedNodeInfo<N>>empty();
    }
}
项目:jpa    文件:CriteriaService.java   
/**
     * fetch join:
     * SELECT e FROM jpa_query_employee e JOIN FETCH e.address
     */
//  @Transactional
    public void doFrom3(){
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Employee> c = cb.createQuery(Employee.class);
        Root<Employee> e = c.from(Employee.class);
        e.fetch("address");
        e.fetch("department");
        e.fetch("projects",JoinType.INNER);
//      e.fetch("phones");
//      e.fetch("directs");
//      e.fetch("manager");
        c.select(e);

        // only show the fetched data
        TypedQuery<Employee> query = em.createQuery(c);
        List<Employee> result = query.getResultList();
        for(Employee emp : result){
            System.out.println(emp.getId() + " | " + emp.getName() + " | " + emp.getAddress() + " | " + emp.getDepartment() + " | " + emp.getProjects());
        }
    }
项目:BikeMan    文件:BookingRepositoryImpl.java   
@Override
@Transactional(readOnly = true)
public List<BookingDTO> findNotUsedAndExpiredBookings(List<String> ixsiBookingIdList) {
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<BookingDTO> criteria = builder.createQuery(BookingDTO.class);

    Root<Booking> booking = criteria.from(Booking.class);
    Join<Booking, Reservation> reservation = booking.join(Booking_.reservation, JoinType.INNER);

    criteria.select(
            builder.construct(
                    BookingDTO.class,
                    booking.get(Booking_.ixsiBookingId),
                    reservation.get(Reservation_.startDateTime)
            )
    );

    criteria.where(
            builder.and(
                    booking.get(Booking_.ixsiBookingId).in(ixsiBookingIdList),
                    booking.get(Booking_.transaction).isNull(),
                    builder.lessThan(reservation.get(Reservation_.endDateTime), new LocalDateTime())
            ));

    return em.createQuery(criteria).getResultList();
}
项目:specification-arg-resolver    文件:SpecificationArgumentResolverTest.java   
@Test
public void resolvesJoinFetchForSimpleSpec() throws Exception {
    MethodParameter param = MethodParameter.forMethodOrConstructor(testMethod("testMethod"), 0);
    NativeWebRequest req = mock(NativeWebRequest.class);
    QueryContext queryCtx = new WebRequestQueryContext(req);
    when(req.getParameterValues("path1")).thenReturn(new String[] { "value1" });

    Specification<?> resolved = (Specification<?>) resolver.resolveArgument(param, null, req, null);

    assertThat(resolved)
        .isInstanceOf(Conjunction.class);

    Collection<Specification<?>> innerSpecs = ReflectionUtils.get(resolved, "innerSpecs");

    assertThat(innerSpecs)
        .hasSize(2)
        .contains(new Like<Object>(queryCtx, "path1", new String[] { "value1" }))
        .contains(new net.kaczmarzyk.spring.data.jpa.domain.JoinFetch<Object>(new String[] { "fetch1", "fetch2" }, JoinType.LEFT));
}
项目:specification-arg-resolver    文件:SpecificationArgumentResolverTest.java   
@Test
public void resolvesJoinContainerWithJoinFetch() throws Exception {
    MethodParameter param = MethodParameter.forMethodOrConstructor(testMethod("testMethod_joinContainerWithJoinFetch"), 0);
    NativeWebRequest req = mock(NativeWebRequest.class);
    QueryContext queryCtx = new WebRequestQueryContext(req);
    when(req.getParameterValues("path1")).thenReturn(new String[] { "value1" });

    Specification<?> resolved = (Specification<?>) resolver.resolveArgument(param, null, req, null);

    assertThat(resolved)
        .isInstanceOf(Conjunction.class);

    Collection<Specification<?>> innerSpecs = ReflectionUtils.get(resolved, "innerSpecs");

    assertThat(innerSpecs)
        .hasSize(2)
        .contains(new Like<Object>(queryCtx, "path1", new String[] { "value1" }))
        .contains(new Conjunction<Object>(
                new net.kaczmarzyk.spring.data.jpa.domain.JoinFetch<Object>(new String[] { "fetch1" }, JoinType.LEFT),
                new net.kaczmarzyk.spring.data.jpa.domain.JoinFetch<Object>(new String[] { "fetch2" }, JoinType.INNER)));
}
项目:specification-arg-resolver    文件:SpecificationArgumentResolverTest.java   
@Test
public void resolvesJoinContainerWithRegularJoin() throws Exception {
    MethodParameter param = MethodParameter.forMethodOrConstructor(testMethod("testMethod_joinContainerWithRegularJoin"), 0);
    FakeWebRequest req = new FakeWebRequest();
    QueryContext queryCtx = new WebRequestQueryContext(req);
    req.setParameterValues("path1", "value1");

    Specification<?> resolved = (Specification<?>) resolver.resolveArgument(param, null, req, null);

    assertThat(resolved)
        .isInstanceOf(Conjunction.class);

    Collection<Specification<?>> innerSpecs = ReflectionUtils.get(resolved, "innerSpecs");

    assertThat(innerSpecs)
        .hasSize(2)
        .contains(new Like<Object>(queryCtx, "path1", new String[] { "value1" }))
        .contains(new Conjunction<Object>(
                new net.kaczmarzyk.spring.data.jpa.domain.Join<Object>(queryCtx, "join1", "alias1", JoinType.INNER, true),
                new net.kaczmarzyk.spring.data.jpa.domain.Join<Object>(queryCtx, "join2", "alias2", JoinType.LEFT, false)));
}
项目:specification-arg-resolver    文件:SpecificationArgumentResolverTest.java   
@Test
public void resolvesJoinContainerWithRegularAndFetchJoins() throws Exception {
    MethodParameter param = MethodParameter.forMethodOrConstructor(testMethod("testMethod_joinContainerWithRegularAndFetchJoins"), 0);
    NativeWebRequest req = mock(NativeWebRequest.class);
    QueryContext queryCtx = new WebRequestQueryContext(req);
    when(req.getParameterValues("path1")).thenReturn(new String[] { "value1" });

    Specification<?> resolved = (Specification<?>) resolver.resolveArgument(param, null, req, null);

    assertThat(resolved)
        .isInstanceOf(Conjunction.class);

    Collection<Specification<?>> innerSpecs = ReflectionUtils.get(resolved, "innerSpecs");

    assertThat(innerSpecs)
        .hasSize(2)
        .contains(new Like<Object>(queryCtx, "path1", new String[] { "value1" }))
        .contains(new Conjunction<Object>(
                new net.kaczmarzyk.spring.data.jpa.domain.JoinFetch<Object>(new String[] { "fetch1" }, JoinType.LEFT),
                new net.kaczmarzyk.spring.data.jpa.domain.JoinFetch<Object>(new String[] { "fetch2" }, JoinType.INNER),
                new net.kaczmarzyk.spring.data.jpa.domain.Join<Object>(queryCtx, "join1", "alias1", JoinType.INNER, true),
                new net.kaczmarzyk.spring.data.jpa.domain.Join<Object>(queryCtx, "join2", "alias2", JoinType.LEFT, false)));
}
项目:specification-arg-resolver    文件:JoinFetchTest.java   
@Test
public void performsTwoFetches() {
    JoinFetch<Customer> spec1 = new JoinFetch<Customer>(new String[] { "orders" }, JoinType.LEFT);
    JoinFetch<Customer> spec2 = new JoinFetch<Customer>(new String[] { "orders2" }, JoinType.INNER);

    Conjunction<Customer> spec = new Conjunction<Customer>(spec1, spec2);

    List<Customer> customers = customerRepo.findAll(spec);

    assertThat(customers).isNotEmpty();

    for (Customer customer : customers) {
        assertTrue(Hibernate.isInitialized(customer.getOrders()));
        assertTrue(Hibernate.isInitialized(customer.getOrders2()));
    }
}
项目:extacrm    文件:LegalEntitySecurityFilter.java   
@Override
protected Predicate createAreaPredicate(final CriteriaBuilder cb, final Root objectRoot, Predicate predicate, final Set permitRegions, final Set permitBrands) {
    if (!permitRegions.isEmpty()) {
        final Predicate regPredicate =
                objectRoot.get(LegalEntity_.legalAddress)
                        .get(Address_.regionWithType)
                        .in(permitRegions);
        predicate = predicate == null ? regPredicate : cb.and(predicate, regPredicate);
    }
    if (!permitBrands.isEmpty()) {
        final Predicate brPredicate =
                objectRoot.join(LegalEntity_.motorBrands, JoinType.LEFT)
                        .in(permitBrands);
        predicate = predicate == null ? brPredicate : cb.and(predicate, brPredicate);
    }
    return predicate;
}
项目:crnk-framework    文件:JoinRegistry.java   
private F getOrCreateJoin(MetaAttributePath srcPath, MetaAttribute targetAttr) {
    MetaAttributePath path = srcPath.concat(targetAttr);
    F parent = joinMap.get(srcPath);
    F join = joinMap.get(path);
    if (join == null) {
        JoinType joinType = query.getJoinType(path);
        join = backend.doJoin(targetAttr, joinType, parent);
        joinMap.put(path, join);
    }
    return join;
}
项目:crnk-framework    文件:QueryFilterBuilder.java   
public List<P> filterSpecListToPredicateArray(MetaDataObject rootMeta, F root, List<FilterSpec> rowFilters,
                                              JoinType defaultPredicateJoinType) {
    ArrayList<P> predicateList = new ArrayList<>();
    for (FilterSpec rowFilter : rowFilters) {
        predicateList.add(filterSpecListToPredicate(rootMeta, root, rowFilter, defaultPredicateJoinType));
    }
    return predicateList;
}
项目:crnk-framework    文件:QueryFilterBuilder.java   
protected P filterSpecListToPredicate(MetaDataObject rootMeta, F root, FilterSpec fs, JoinType defaultPredicateJoinType) {
    if ((fs.getOperator() == FilterOperator.EQ || fs.getOperator() == FilterOperator.NEQ)
            && fs.getValue() instanceof Collection && ((Collection<?>) fs.getValue()).size() > PARAM_LIMIT_FOR_ORACLE) {

        return filterLargeValueSets(fs, rootMeta, root, defaultPredicateJoinType);
    } else {
        if (fs.hasExpressions()) {
            return filterExpressions(fs, rootMeta, root, defaultPredicateJoinType);
        } else {
            return filterSimpleOperation(fs, rootMeta);
        }
    }
}
项目:crnk-framework    文件:QueryFilterBuilder.java   
private P filterLargeValueSets(FilterSpec filterSpec, MetaDataObject rootMeta, F root, JoinType defaultPredicateJoinType) {
    // Split filter values with two many elements. Oracle is limited to 1000.
    ArrayList<FilterSpec> filterSpecs = new ArrayList<>();
    List<?> list = new ArrayList<>((Collection<?>) filterSpec.getValue());
    for (int i = 0; i < list.size(); i += PARAM_LIMIT_FOR_ORACLE) {
        int nextOffset = i + Math.min(list.size() - i, PARAM_LIMIT_FOR_ORACLE);
        List<?> batchList = list.subList(i, nextOffset);
        filterSpecs.add(new FilterSpec(filterSpec.getAttributePath(), filterSpec.getOperator(), batchList));
    }

    FilterSpec orSpec = FilterSpec.or(filterSpecs);
    return filterSpecListToPredicate(rootMeta, root, orSpec, defaultPredicateJoinType);
}
项目:crnk-framework    文件:QueryFilterBuilder.java   
private P filterExpressions(FilterSpec fs, MetaDataObject rootMeta, F root, JoinType defaultPredicateJoinType) {
    // and, or, not.
    if (fs.getOperator() == FilterOperator.NOT) {
        return backend.not(
                backend.and(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType)));
    } else if (fs.getOperator() == FilterOperator.AND) {
        return backend.and(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType));
    } else if (fs.getOperator() == FilterOperator.OR) {
        return backend.or(filterSpecListToPredicateArray(rootMeta, root, fs.getExpression(), defaultPredicateJoinType));
    } else {
        throw new IllegalArgumentException(fs.toString());
    }
}
项目:crnk-framework    文件:QuerydslUtils.java   
public static com.querydsl.core.JoinType convertJoinType(JoinType joinType) {
    switch (joinType) {
        case INNER:
            return com.querydsl.core.JoinType.JOIN;
        case LEFT:
            return com.querydsl.core.JoinType.LEFTJOIN;
        case RIGHT:
            return com.querydsl.core.JoinType.RIGHTJOIN;
        default:
            throw new IllegalStateException(joinType.toString() + " unknown");
    }
}
项目:crnk-framework    文件:QuerydslQueryBackend.java   
@Override
public Expression<?> doJoin(MetaAttribute targetAttr, JoinType joinType, Expression<?> parent) {
    if (targetAttr instanceof MetaComputedAttribute) {

        MetaComputedAttribute computedAttr = (MetaComputedAttribute) targetAttr;
        QuerydslExpressionFactory expressionFactory = (QuerydslExpressionFactory<?>) queryImpl.getComputedAttrs()
                .get(computedAttr);

        return expressionFactory.getExpression(parent, getQuery());
    } else {
        Expression<Object> expression = QuerydslUtils.get(parent, targetAttr.getName());
        querydslQuery.getMetadata().addJoin(QuerydslUtils.convertJoinType(joinType), expression);
        return expression;
    }
}