Refine search
@Override public List<PageField> readPageFieldsByPageId(Long pageId) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<PageField> criteria = builder.createQuery(PageField.class); Root<PageFieldImpl> pageField = criteria.from(PageFieldImpl.class); criteria.select(pageField); Path<Object> path = pageField.get("page").get("id"); criteria.where(builder.equal(pageField.get("page").get("id"), pageId)); TypedQuery<PageField> query = em.createQuery(criteria); query.setHint(QueryHints.HINT_CACHEABLE, true); return query.getResultList(); }
@Override public List<Page> readOnlineAndIncludedPages(int limit, int offset, String sortBy) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Page> criteria = builder.createQuery(Page.class); Root<PageImpl> page = criteria.from(PageImpl.class); criteria.select(page); criteria.where(builder.and( builder.or(builder.isFalse(page.get("offlineFlag").as(Boolean.class)), builder.isNull(page.get("offlineFlag").as(Boolean.class))), builder.or(builder.isFalse(page.get("excludeFromSiteMap").as(Boolean.class)), builder.isNull(page.get("excludeFromSiteMap").as(Boolean.class))))); criteria.orderBy(builder.asc(page.get(sortBy))); TypedQuery<Page> query = em.createQuery(criteria); query.setFirstResult(offset); query.setMaxResults(limit); query.setHint(QueryHints.HINT_CACHEABLE, true); return query.getResultList(); }
protected List<Product> readFilteredActiveProductsByQueryInternal(String query, Date currentDate, SearchCriteria searchCriteria) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Product> criteria = builder.createQuery(Product.class); Root<ProductImpl> product = criteria.from(ProductImpl.class); Join<Product, Sku> sku = product.join("defaultSku"); criteria.select(product); String lq = query.toLowerCase(); restrictions.add( builder.or( builder.like(builder.lower(sku.get("name").as(String.class)), '%' + lq + '%'), builder.like(builder.lower(sku.get("longDescription").as(String.class)), '%' + lq + '%') criteria.where(restrictions.toArray(new Predicate[restrictions.size()])); TypedQuery<Product> typedQuery = em.createQuery(criteria); return typedQuery.getResultList();
CriteriaBuilder qb = entityManager.getCriteriaBuilder(); CriteriaQuery<Long> cq = qb.createQuery(Long.class); cq.select(qb.count(cq.from(MyEntity.class))); cq.where(/*your stuff*/); return entityManager.createQuery(cq).getSingleResult();
Map<SingularAttribute<Transaction, ?>, Object> params = ...; CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> cq = cb.createTupleQuery(); Root<Transaction> r = cq.from(Transaction.class); Predicate p= cb.conjunction(); for (Map.Entry<SingularAttribute<Transaction, ?>, Object> param: params.entrySet()) p = cb.and(p, cb.equal(r.get(param.getKey()), param.getValue())); cq.multiselect(r.get(Transaction_.id), r.get(Transaction_.status), r.get(Transaction_.created_at)) .where(p) .orderBy(cb.asc(r.get(Transaction_.id))); List<Tuple> result = em.createQuery(cq).getResultList();
@Override public Predicate buildPredicate(CriteriaBuilder builder, FieldPathBuilder fieldPathBuilder, From root, String ceilingEntity, String fullPropertyName, Path<Character> explicitPath, List<Character> directValues) { return builder.or(builder.equal(explicitPath, 'N'), builder.isNull(explicitPath)); } })
public long count(Class<?> clazz) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Long> cq = cb.createQuery(Long.class); cq.select(cb.count(cq.from(clazz))); return em.createQuery(cq).getSingleResult(); }
@Override public List<Order> readOrdersByDateRange(final Date startDate, final Date endDate) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Order> criteria = builder.createQuery(Order.class); Root<OrderImpl> order = criteria.from(OrderImpl.class); criteria.select(order); criteria.where(builder.between(order.<Date>get("submitDate"), startDate, endDate)); criteria.orderBy(builder.desc(order.get("submitDate"))); TypedQuery<Order> query = em.createQuery(criteria); query.setHint(QueryHints.HINT_CACHEABLE, true); query.setHint(QueryHints.HINT_CACHE_REGION, "query.Order"); return query.getResultList(); }
private List<RootEntity> getAllRows(EntityManager em) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<RootEntity> cq = cb.createQuery( RootEntity.class ); Root<RootEntity> c = cq.from( RootEntity.class ); return em.createQuery( cq.select( c ).orderBy( cb.desc( c.get( "status" ) ) ) ).getResultList(); }
private <T extends CredentialStorage> List<?> findCredentials(IdentityContext context, Account account, Class<T> storageClass) { EntityMapper attributeMapper = getCredentialAttributeMapper(storageClass); EntityManager entityManager = getEntityManager(context); CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<?> criteria = builder.createQuery(attributeMapper.getEntityType()); Root<?> root = criteria.from(attributeMapper.getEntityType()); List<Predicate> predicates = new ArrayList<Predicate>(); Object agentInstance = getRootEntity(account, entityManager); Property identityTypeProperty = attributeMapper.getProperty(storageClass, OwnerReference.class).getValue(); predicates.add(builder.equal(root.get(identityTypeProperty.getName()), agentInstance)); Property typeProperty = attributeMapper.getProperty(storageClass, CredentialClass.class).getValue(); Property effectiveProperty = attributeMapper.getProperty(storageClass, EffectiveDate.class).getValue(); predicates.add(builder.equal(root.get(typeProperty.getName()), storageClass.getName())); predicates.add(builder.lessThanOrEqualTo(root.<Date>get(effectiveProperty.getName()), new Date())); criteria.where(predicates.toArray(new Predicate[predicates.size()])); criteria.orderBy(builder.desc(root.get(effectiveProperty.getName()))); return entityManager.createQuery(criteria).getResultList(); }
@Override public Long countOfferCodeUses(Order order, Long offerCodeId) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> criteria = builder.createQuery(Long.class); Root<OfferAuditImpl> root = criteria.from(OfferAuditImpl.class); criteria.select(builder.count(root)); List<Predicate> restrictions = new ArrayList<>(); restrictions.add( builder.and( builder.or( builder.notEqual(root.get("orderId"), getOrderId(order)), builder.isNull(root.get("orderId")) ), builder.equal(root.get("offerCodeId"), offerCodeId) ) ); criteria.where(restrictions.toArray(new Predicate[restrictions.size()])); try { return em.createQuery(criteria).getSingleResult(); } catch (Exception e) { LOG.error("Error counting offer code uses.", e); return null; } }
@Override public void removedExpiredAccounts(LocalDate reference) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Account> query = cb.createQuery(Account.class); Root<Account> account = query.from(Account.class); query.where(cb.lessThan(account.get("expiryDate").as(Date.class), reference.toDateTimeAtStartOfDay().toDate())); for (Account each : em.createQuery(query).getResultList()) { em.remove(each); } } }
protected Long readCountAllActiveSkusInternal(Date currentDate) { // Set up the criteria query that specifies we want to return a Long CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> criteria = builder.createQuery(Long.class); // The root of our search is sku Root<SkuImpl> sku = criteria.from(SkuImpl.class); // We want the count of products criteria.select(builder.count(sku)); // Ensure the sku is currently active List<Predicate> restrictions = new ArrayList<Predicate>(); // Add the active start/end date restrictions restrictions.add(builder.lessThan(sku.get("activeStartDate").as(Date.class), currentDate)); restrictions.add(builder.or( builder.isNull(sku.get("activeEndDate")), builder.greaterThan(sku.get("activeEndDate").as(Date.class), currentDate))); // Add the restrictions to the criteria query criteria.where(restrictions.toArray(new Predicate[restrictions.size()])); TypedQuery<Long> query = em.createQuery(criteria); query.setHint(QueryHints.HINT_CACHEABLE, true); query.setHint(QueryHints.HINT_CACHE_REGION, "query.Catalog"); return query.getSingleResult(); }
private List<IBaseResource> doHistoryInTransaction(int theFromIndex, int theToIndex) { List<ResourceHistoryTable> results; CriteriaBuilder cb = myEntityManager.getCriteriaBuilder(); CriteriaQuery<ResourceHistoryTable> q = cb.createQuery(ResourceHistoryTable.class); Root<ResourceHistoryTable> from = q.from(ResourceHistoryTable.class); List<Predicate> predicates = new ArrayList<>(); predicates.add(cb.equal(from.get("myResourceType"), mySearchEntity.getResourceType())); } else { predicates.add(cb.equal(from.get("myResourceId"), mySearchEntity.getResourceId())); predicates.add(cb.greaterThanOrEqualTo(from.get("myUpdated").as(Date.class), mySearchEntity.getLastUpdatedLow())); predicates.add(cb.lessThanOrEqualTo(from.get("myUpdated").as(Date.class), mySearchEntity.getLastUpdatedHigh())); q.where(predicates.toArray(new Predicate[predicates.size()])); q.orderBy(cb.desc(from.get("myUpdated"))); TypedQuery<ResourceHistoryTable> query = myEntityManager.createQuery(q); query.setFirstResult(theFromIndex); query.setMaxResults(theToIndex - theFromIndex); results = query.getResultList();
@Test public void test_criteria_from_multiple_root_example() { doInJPA( this::entityManagerFactory, entityManager -> { String address = "Earth"; String prefix = "J%"; //tag::criteria-from-multiple-root-example[] CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> criteria = builder.createQuery( Tuple.class ); Root<Person> personRoot = criteria.from( Person.class ); Root<Partner> partnerRoot = criteria.from( Partner.class ); criteria.multiselect( personRoot, partnerRoot ); Predicate personRestriction = builder.and( builder.equal( personRoot.get( Person_.address ), address ), builder.isNotEmpty( personRoot.get( Person_.phones ) ) ); Predicate partnerRestriction = builder.and( builder.like( partnerRoot.get( Partner_.name ), prefix ), builder.equal( partnerRoot.get( Partner_.version ), 0 ) ); criteria.where( builder.and( personRestriction, partnerRestriction ) ); List<Tuple> tuples = entityManager.createQuery( criteria ).getResultList(); //end::criteria-from-multiple-root-example[] assertEquals(2, tuples.size()); }); }
@TestForIssue(jiraKey = "HHH-9296") @Test public void selectByParent() { doInJPA( this::entityManagerFactory, entityManager -> { Post post = entityManager.find( Post.class, 1 ); CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<PostDetails> query = cb.createQuery( PostDetails.class ); Root<PostDetails> root = query.from( PostDetails.class ); query.where( cb.equal( root.get( "post" ), post ) ); final PostDetails result = entityManager.createQuery( query ).getSingleResult(); assertNotNull( result ); }); }
@Test public void test_criteria_param_example() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::criteria-param-example[] CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Person> criteria = builder.createQuery( Person.class ); Root<Person> root = criteria.from( Person.class ); ParameterExpression<String> nickNameParameter = builder.parameter( String.class ); criteria.where( builder.equal( root.get( Person_.nickName ), nickNameParameter ) ); TypedQuery<Person> query = entityManager.createQuery( criteria ); query.setParameter( nickNameParameter, "JD" ); List<Person> persons = query.getResultList(); //end::criteria-param-example[] assertEquals(1, persons.size()); }); }
@Override public List<Long> readAllGenericEntityId(Class<?> clazz) { clazz = DynamicDaoHelperImpl.getNonProxyImplementationClassIfNecessary(clazz); CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> criteria = builder.createQuery(Long.class); Root root = criteria.from(clazz); criteria.select(root.get(getIdField(clazz).getName()).as(Long.class)); criteria.orderBy(builder.asc(root.get(getIdField(clazz).getName()))); return em.createQuery(criteria).getResultList(); }
private CriteriaQuery<SearchRedirect> buildFindSearchRedirectBySearchTermCriteria(String searchTerm) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<SearchRedirect> criteria = builder.createQuery(SearchRedirect.class); Root<SearchRedirectImpl> redirect = criteria.from(SearchRedirectImpl.class); List<Predicate> restrictions = new ArrayList<>(); restrictions.add(builder.equal(builder.upper(redirect.<String>get("searchTerm")), searchTerm.toUpperCase())); // Add the active start/end date restrictions Date currentDate = getCurrentDateAfterFactoringInDateResolution(); if (isNullActiveStartDateActive) { restrictions.add(builder.or(builder.isNull(redirect.get("activeStartDate")), builder.lessThanOrEqualTo(redirect.get("activeStartDate").as(Date.class), currentDate))); } else { restrictions.add(builder.and(builder.isNotNull(redirect.get("activeStartDate")), builder.lessThanOrEqualTo(redirect.get("activeStartDate").as(Date.class), currentDate))); } restrictions.add(builder.or(builder.isNull(redirect.get("activeEndDate")), builder.greaterThan(redirect.get("activeEndDate").as(Date.class), currentDate))); // Add the restrictions to the criteria query criteria.select(redirect); criteria.where(restrictions.toArray(new Predicate[restrictions.size()])); return criteria.orderBy(builder.asc(redirect.get("searchPriority"))); }
@Override public Long countAllowedValuesForProductOptionById(Long productOptionId) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> criteria = builder.createQuery(Long.class); Root<ProductOptionValueImpl> root = criteria.from(ProductOptionValueImpl.class); criteria.select(builder.count(root)); List<Predicate> restrictions = new ArrayList<>(); List<Long> mergedIds = sandBoxHelper.mergeCloneIds(ProductOptionImpl.class, productOptionId); restrictions.add(root.get("productOption").in(mergedIds)); criteria.where(restrictions.toArray(new Predicate[restrictions.size()])); TypedQuery<Long> query = em.createQuery(criteria); return query.getSingleResult(); }