@Override public SearchFacet readSearchFacetForField(Field field) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<SearchFacet> criteria = builder.createQuery(SearchFacet.class); Root<SearchFacetImpl> facet = criteria.from(SearchFacetImpl.class); criteria.select(facet); criteria.where( builder.equal(facet.join("fieldType").join("indexField").join("field").get("id").as(Long.class), field.getId()) ); TypedQuery<SearchFacet> query = em.createQuery(criteria); query.setHint(QueryHints.HINT_CACHEABLE, true); query.setHint(QueryHints.HINT_CACHE_REGION, "query.Search"); try { return query.getSingleResult(); } catch (NoResultException e) { return null; } }
private static ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl> [] getPeopleAssignmentsJoins( Join<TaskImpl,PeopleAssignmentsImpl> peopleAssignJoin) { ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl> [] joins = new ListJoin[3]; for( Join<PeopleAssignmentsImpl,?> join : peopleAssignJoin.getJoins() ) { String joinFieldName = join.getAttribute().getName(); if( PeopleAssignmentsImpl_.businessAdministrators.getName().equals(joinFieldName) ) { joins[0] = (ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl>) join; } else if( PeopleAssignmentsImpl_.potentialOwners.getName().equals(joinFieldName) ) { joins[1] = (ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl>) join; } else if( PeopleAssignmentsImpl_.taskStakeholders.getName().equals(joinFieldName) ) { joins[2] = (ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl>) join; } } if( joins[0] == null ) { joins[0] = peopleAssignJoin.join(PeopleAssignmentsImpl_.businessAdministrators, JoinType.LEFT); } if( joins[1] == null ) { joins[1] = peopleAssignJoin.join(PeopleAssignmentsImpl_.potentialOwners, JoinType.LEFT); } if( joins[2] == null ) { joins[2] = peopleAssignJoin.join(PeopleAssignmentsImpl_.taskStakeholders, JoinType.LEFT); } assert joins[0] != null : "Could not find business administrators join!"; assert joins[1] != null : "Could not find potential owners join!"; assert joins[2] != null : "Could not find task stakeholders join!"; return joins; }
Join<Product, Sku> sku = product.join("defaultSku"); Join<CategoryProductXref, Category> category = productXref.join("category");
@Override public List<SearchFacet> readAllSearchFacets(FieldEntity entityType) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<SearchFacet> criteria = builder.createQuery(SearchFacet.class); Root<SearchFacetImpl> facet = criteria.from(SearchFacetImpl.class); criteria.select(facet); Path<Character> archived = facet.get("archiveStatus").get("archived"); criteria.where( builder.equal(facet.get("showOnSearch").as(Boolean.class), true), builder.or(builder.isNull(archived.as(String.class)), builder.notEqual(archived.as(Character.class), 'Y')), facet.join("fieldType") .join("indexField") .join("field") .get("entityType") .as(String.class) .in(entityType.getAllLookupTypes()) ); TypedQuery<SearchFacet> query = em.createQuery(criteria); query.setHint(QueryHints.HINT_CACHEABLE, true); query.setHint(QueryHints.HINT_CACHE_REGION, "query.Search"); return query.getResultList(); }
@Test public void test_criteria_from_join_example() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::criteria-from-join-example[] CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Phone> criteria = builder.createQuery( Phone.class ); Root<Phone> root = criteria.from( Phone.class ); // Phone.person is a @ManyToOne Join<Phone, Person> personJoin = root.join( Phone_.person ); // Person.addresses is an @ElementCollection Join<Person, String> addressesJoin = personJoin.join( Person_.addresses ); criteria.where( builder.isNotEmpty( root.get( Phone_.calls ) ) ); List<Phone> phones = entityManager.createQuery( criteria ).getResultList(); //end::criteria-from-join-example[] assertEquals(2, phones.size()); }); }
joinQuery.select(select); Join<TaskImpl, PeopleAssignmentsImpl> peopleAssign = taskRoot.join(TaskImpl_.peopleAssignments); ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl> busAdmins = peopleAssign.join(PeopleAssignmentsImpl_.businessAdministrators, JoinType.LEFT); ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl> potOwners = peopleAssign.join(PeopleAssignmentsImpl_.potentialOwners, JoinType.LEFT); ListJoin<PeopleAssignmentsImpl,OrganizationalEntityImpl> stakeHols = peopleAssign.join(PeopleAssignmentsImpl_.taskStakeholders, JoinType.LEFT);
Join<TermConceptMapGroup, TermConceptMap> conceptMapJoin = groupJoin.join("myConceptMap");
From<ResourceTag, TagDefinition> defJoin = tagJoin.join("myTag");
@Override @SuppressWarnings("hiding") public <X, Y> Fetch<X, Y> fetch(String attributeName) { return new JoinFetchAdapter<>(join.join(attributeName)); }
@Override @SuppressWarnings("hiding") public <X, Y> Fetch<X, Y> fetch(String attributeName, JoinType jt) { return new JoinFetchAdapter<>(join.join(attributeName, jt)); }
@Override public <Z> Fetch<Y, Z> fetch(SingularAttribute<? super Y, Z> attribute, JoinType jt) { return new JoinFetchAdapter<>(join.join(attribute, jt)); }
public static Predicate<BuildRecord> withBuildConfigSetId(Integer buildConfigSetId) { return (root, query, cb) -> { Join<BuildRecord, BuildConfigSetRecord> builtConfigSetRecord = root.join(BuildRecord_.buildConfigSetRecord); Join<BuildConfigSetRecord, BuildConfigurationSet> buildConfigSet = builtConfigSetRecord.join(BuildConfigSetRecord_.buildConfigurationSet); return cb.equal(buildConfigSet.get(BuildConfigurationSet_.id), buildConfigSetId); }; }
public static Predicate<BuildConfiguration> withProductId(Integer productId) { return (root, query, cb) -> { Join<BuildConfiguration, ProductVersion> productVersions = root.join(BuildConfiguration_.productVersion); Join<ProductVersion, Product> product = productVersions.join(ProductVersion_.product); return cb.equal(product.get(Product_.id), productId); }; }
protected void addLikePropertyPredicate(String propName, String propValue, Root<?> root, CriteriaBuilder cb, List<Predicate> predicates) { if(StringUtils.isNotBlank(propValue)){ Join<?, ?> customProperties = root.join(CUSTOM_PROPERTIES); Path<?> key = customProperties.get(CUSTOM_PROPERTIES_KEY); predicates.add(cb.equal(key, propName)); Path<?> value = customProperties.join(CUSTOM_PROPERTIES_VALUES).get(CUSTOM_PROPERTIES_VALUES_VALUE); Expression<String> expression = value.as(String.class); predicates.add(cb.like(expression, '%' + propValue + '%')); } } }
@Override protected Predicate getIdPredicate(Root<PersistableGroupTimePeriod> root, CriteriaBuilder cb) { Join<PersistableGroupTimePeriod, PersistableOrganisationGroup> group = root.join("organisationGroup"); Join<PersistableOrganisationGroup, PersistableCollection> collection = group.join("collections"); Path<Long> collectionId = collection.get("id"); return cb.equal(collectionId, query.getId()); }
@Override protected List<Predicate> getPredicates(Root<PersistableCollection> root, CriteriaBuilder cb) { Join<PersistableCollection, PersistableOrganisationGroup> group = root.join("organisationGroups"); Join<PersistableCollection, PersistableGroupTimePeriod> period = group.join("periods"); Path<Long> organisationId = period.get("organisation").get("id"); List<Predicate> predicates = Arrays.asList(cb.equal(organisationId, query.getOrganisationId())); return predicates; }
@Override public List<WorkspaceItem> findBySupervisedGroupMember(Context context, EPerson ePerson) throws SQLException { CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context); CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, WorkspaceItem.class); Root<WorkspaceItem> workspaceItemRoot = criteriaQuery.from(WorkspaceItem.class); Join<WorkspaceItem, Group> join = workspaceItemRoot.join("supervisorGroups"); Join<Group, EPerson> secondJoin = join.join("epeople"); criteriaQuery.select(workspaceItemRoot); criteriaQuery.where(criteriaBuilder.equal(secondJoin.get(EPerson_.id), ePerson.getID())); criteriaQuery.orderBy(criteriaBuilder.asc(workspaceItemRoot.get(WorkspaceItem_.workspaceItemId))); return list(context, criteriaQuery, false, WorkspaceItem.class, -1, -1); }
public JoinWrapper createJoinFromJoin(final String joinName, final JoinType joinType) { if (join != null) { final Join innerJoin = join.join(joinName, joinType); return new JoinWrapper(innerJoin); } final Fetch innerJoin = joinFetch.fetch(joinName, joinType); return new JoinWrapper(innerJoin); }
private Path<?> getNextPath(Path<?> element, String name, String postName, ClassValue cv, CollectionCheckInfo collSize) { final boolean isCollectionOrJoin = collSize == null && (cv.isCollection(name) || isJoinProperty(name) || existingCollectionInPostName(cv, postName)) && (element == root || element instanceof Join); if (isCollectionOrJoin) { final Path<?> path = getExistingJoinProperty((From<?, ?>)element, name); if (path != null) { return path; } return element == root ? root.join(name) : ((Join<?, ?>)element).join(name); } return element.get(name); }