List of usage examples for javax.persistence.criteria CriteriaQuery orderBy
CriteriaQuery<T> orderBy(List<Order> o);
From source file:net.groupbuy.dao.impl.BaseDaoImpl.java
private void addOrders(CriteriaQuery<T> criteriaQuery, List<Order> orders) { if (criteriaQuery == null || orders == null || orders.isEmpty()) { return;//from w w w.j av a 2s . c om } Root<T> root = getRoot(criteriaQuery); if (root == null) { return; } CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); List<javax.persistence.criteria.Order> orderList = new ArrayList<javax.persistence.criteria.Order>(); if (!criteriaQuery.getOrderList().isEmpty()) { orderList.addAll(criteriaQuery.getOrderList()); } for (Order order : orders) { if (order.getDirection() == Direction.asc) { orderList.add(criteriaBuilder.asc(root.get(order.getProperty()))); } else if (order.getDirection() == Direction.desc) { orderList.add(criteriaBuilder.desc(root.get(order.getProperty()))); } } criteriaQuery.orderBy(orderList); }
From source file:net.groupbuy.dao.impl.ArticleDaoImpl.java
public List<Article> findList(ArticleCategory articleCategory, Date beginDate, Date endDate, Integer first, Integer count) {/*from w ww .j av a 2 s. c o m*/ CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Article> criteriaQuery = criteriaBuilder.createQuery(Article.class); Root<Article> root = criteriaQuery.from(Article.class); criteriaQuery.select(root); Predicate restrictions = criteriaBuilder.conjunction(); restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("isPublication"), true)); if (articleCategory != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.or(criteriaBuilder.equal(root.get("articleCategory"), articleCategory), criteriaBuilder.like(root.get("articleCategory").<String>get("treePath"), "%" + ArticleCategory.TREE_PATH_SEPARATOR + articleCategory.getId() + ArticleCategory.TREE_PATH_SEPARATOR + "%"))); } if (beginDate != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThanOrEqualTo(root.<Date>get("createDate"), beginDate)); } if (endDate != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThanOrEqualTo(root.<Date>get("createDate"), endDate)); } criteriaQuery.where(restrictions); criteriaQuery.orderBy(criteriaBuilder.desc(root.get("isTop"))); return super.findList(criteriaQuery, first, count, null, null); }
From source file:org.osiam.resource_server.storage.dao.ResourceDao.java
public <T extends ResourceEntity> SearchResult<T> search(Class<T> clazz, ParseTree filterTree, int count, int startIndex, String sortBy, String sortOrder, FilterParser<T> filterParser) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<T> resourceQuery = cb.createQuery(clazz); Root<T> resourceRoot = resourceQuery.from(clazz); Subquery<Long> internalIdQuery = resourceQuery.subquery(Long.class); Root<T> internalIdRoot = internalIdQuery.from(clazz); internalIdQuery.select(internalIdRoot.get(ResourceEntity_.internalId)); if (filterTree != null && filterTree.getChildCount() > 0) { Predicate predicate = filterParser.createPredicateAndJoin(filterTree, internalIdRoot); internalIdQuery.where(predicate); }/*from w w w . j a va 2 s . c om*/ resourceQuery.select(resourceRoot) .where(cb.in(resourceRoot.get(ResourceEntity_.internalId)).value(internalIdQuery)); // TODO: evaluate if a User-/GroupDao supplied default sortBy field is possible Expression<?> sortByField = resourceRoot.get(ResourceEntity_.id); if (sortBy != null && !sortBy.isEmpty()) { sortByField = filterParser.createSortByField(sortBy, resourceRoot); } // default order is ascending Order order = cb.asc(sortByField); if (sortOrder.equalsIgnoreCase("descending")) { order = cb.desc(sortByField); } resourceQuery.orderBy(order); TypedQuery<T> query = em.createQuery(resourceQuery); query.setFirstResult(startIndex); query.setMaxResults(count); List<T> results = query.getResultList(); long totalResult = getTotalResults(clazz, internalIdQuery); return new SearchResult<>(results, totalResult); }
From source file:net.groupbuy.dao.impl.ArticleDaoImpl.java
public Page<Article> findPage(ArticleCategory articleCategory, List<Tag> tags, Pageable pageable) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Article> criteriaQuery = criteriaBuilder.createQuery(Article.class); Root<Article> root = criteriaQuery.from(Article.class); criteriaQuery.select(root);/* w w w . j a va 2 s . co m*/ Predicate restrictions = criteriaBuilder.conjunction(); restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("isPublication"), true)); if (articleCategory != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.or(criteriaBuilder.equal(root.get("articleCategory"), articleCategory), criteriaBuilder.like(root.get("articleCategory").<String>get("treePath"), "%" + ArticleCategory.TREE_PATH_SEPARATOR + articleCategory.getId() + ArticleCategory.TREE_PATH_SEPARATOR + "%"))); } if (tags != null && !tags.isEmpty()) { Subquery<Article> subquery = criteriaQuery.subquery(Article.class); Root<Article> subqueryRoot = subquery.from(Article.class); subquery.select(subqueryRoot); subquery.where(criteriaBuilder.equal(subqueryRoot, root), subqueryRoot.join("tags").in(tags)); restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.exists(subquery)); } criteriaQuery.where(restrictions); criteriaQuery.orderBy(criteriaBuilder.desc(root.get("isTop"))); return super.findPage(criteriaQuery, pageable); }
From source file:net.groupbuy.dao.impl.ArticleDaoImpl.java
public List<Article> findList(ArticleCategory articleCategory, List<Tag> tags, Integer count, List<Filter> filters, List<Order> orders) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Article> criteriaQuery = criteriaBuilder.createQuery(Article.class); Root<Article> root = criteriaQuery.from(Article.class); criteriaQuery.select(root);/*from www .java2s. c o m*/ Predicate restrictions = criteriaBuilder.conjunction(); restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("isPublication"), true)); if (articleCategory != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.or(criteriaBuilder.equal(root.get("articleCategory"), articleCategory), criteriaBuilder.like(root.get("articleCategory").<String>get("treePath"), "%" + ArticleCategory.TREE_PATH_SEPARATOR + articleCategory.getId() + ArticleCategory.TREE_PATH_SEPARATOR + "%"))); } if (tags != null && !tags.isEmpty()) { Subquery<Article> subquery = criteriaQuery.subquery(Article.class); Root<Article> subqueryRoot = subquery.from(Article.class); subquery.select(subqueryRoot); subquery.where(criteriaBuilder.equal(subqueryRoot, root), subqueryRoot.join("tags").in(tags)); restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.exists(subquery)); } criteriaQuery.where(restrictions); criteriaQuery.orderBy(criteriaBuilder.desc(root.get("isTop"))); return super.findList(criteriaQuery, null, count, filters, orders); }
From source file:net.groupbuy.dao.impl.MemberDaoImpl.java
public List<Object[]> findPurchaseList(Date beginDate, Date endDate, Integer count) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Object[]> criteriaQuery = criteriaBuilder.createQuery(Object[].class); Root<Member> member = criteriaQuery.from(Member.class); Join<Product, Order> orders = member.join("orders"); criteriaQuery.multiselect(member.get("id"), member.get("username"), member.get("email"), member.get("point"), member.get("amount"), member.get("balance"), criteriaBuilder.sum(orders.<BigDecimal>get("amountPaid"))); Predicate restrictions = criteriaBuilder.conjunction(); if (beginDate != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.greaterThanOrEqualTo(orders.<Date>get("createDate"), beginDate)); }//from w w w. ja v a 2 s . c om if (endDate != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.lessThanOrEqualTo(orders.<Date>get("createDate"), endDate)); } restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(orders.get("orderStatus"), OrderStatus.completed), criteriaBuilder.equal(orders.get("paymentStatus"), PaymentStatus.paid)); criteriaQuery.where(restrictions); criteriaQuery.groupBy(member.get("id"), member.get("username"), member.get("email"), member.get("point"), member.get("amount"), member.get("balance")); criteriaQuery.orderBy(criteriaBuilder.desc(criteriaBuilder.sum(orders.<BigDecimal>get("amountPaid")))); TypedQuery<Object[]> query = entityManager.createQuery(criteriaQuery).setFlushMode(FlushModeType.COMMIT); if (count != null && count >= 0) { query.setMaxResults(count); } return query.getResultList(); }
From source file:com.qpark.eip.core.spring.statistics.dao.StatisticsLoggingDao.java
/** * Add the {@link SystemUserLogType} to the database. * * @param log//www . j av a 2s. c o m * the {@link SystemUserLogType} to add. */ private void addChannelInvocation(final SystemUserLogType log) { /* Setup context and version. */ log.setContext(this.getContextName()); log.setVersion(this.getContextVersion()); if (log.getUserName() != null && log.getUserName().trim().length() == 0) { log.setUserName(null); } /* Setup to search existing one. */ final CriteriaBuilder cb = this.em.getCriteriaBuilder(); final CriteriaQuery<SystemUserLogType> q = cb.createQuery(SystemUserLogType.class); final Root<SystemUserLogType> c = q.from(SystemUserLogType.class); final List<Predicate> predicates = new ArrayList<Predicate>(); predicates.add(cb.equal(c.<String>get(SystemUserLogType_.context), log.getContext())); predicates.add(cb.equal(c.<String>get(SystemUserLogType_.version), log.getVersion())); if (log.getUserName() == null) { predicates.add(cb.isNull(c.<String>get(SystemUserLogType_.userName))); } else { predicates.add(cb.equal(c.<String>get(SystemUserLogType_.userName), log.getUserName())); } predicates.add(cb.equal(c.<String>get(SystemUserLogType_.serviceName), log.getServiceName())); predicates.add(cb.equal(c.<String>get(SystemUserLogType_.operationName), log.getOperationName())); predicates.add(cb.between(c.<Date>get(SystemUserLogType_.logDateItem), getDayStart(log.getLogDateItem()), getDayEnd(log.getLogDateItem()))); q.where(predicates.toArray(new Predicate[predicates.size()])); q.orderBy(cb.desc(c.<Long>get(SystemUserLogType_.hjid))); TypedQuery<SystemUserLogType> typedQuery = this.em.createQuery(q); SystemUserLogType persistence = null; synchronized (StatisticsLoggingDao.class) { try { persistence = typedQuery.getSingleResult(); if (persistence == null) { /* Not found -> persist */ persistence = log; this.setupSystemUserLog(persistence, null); this.em.persist(persistence); } else { /* Found -> add and merge */ this.setupSystemUserLog(persistence, log); this.em.merge(persistence); } } catch (final NoResultException e) { /* Not found -> persist */ persistence = log; this.setupSystemUserLog(persistence, null); this.em.persist(persistence); } catch (final NonUniqueResultException e) { /* Found more */ typedQuery = this.em.createQuery(q); final List<SystemUserLogType> list = typedQuery.getResultList(); SystemUserLogType l; for (int i = 0; i < list.size(); i++) { l = list.get(i); if (persistence == null && l.getHjid() != null) { persistence = l; break; } } if (persistence != null) { /* Found more -> condense to first valid one -> merge. */ this.setupSystemUserLog(persistence, log); for (int i = list.size() - 1; i >= 0; i--) { l = list.get(i); if (l != null && l.getHjid() != null) { if (persistence.getHjid().equals(l.getHjid())) { } else { this.setupSystemUserLog(persistence, l); list.remove(i); this.em.remove(l); } } } this.em.merge(persistence); } else { /* Found more -> no valid one in list -> persist. */ persistence = log; this.setupSystemUserLog(persistence, null); this.em.persist(persistence); } } } this.logger.debug("addChannelInvocation SystemUserLog {} {} {} {} {} {}", this.contextNameProvider.getContextName(), this.contextNameProvider.getContextVersion(), String.valueOf(persistence.getUserName()), persistence.getServiceName(), persistence.getOperationName(), persistence.getLogDate().toXMLFormat()); }
From source file:de.whs.poodle.repositories.StatisticsRepository.java
public List<Statistic> getStatistics(FeedbackSearchCriteria s, int instructorId, int limit) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Statistic> cq = cb.createQuery(Statistic.class); Root<Statistic> statistic = cq.from(Statistic.class); /* fetch the exercises immediately so they don't have to * be lazy-fetched one by one while rendering the table rows. */ statistic.fetch("exercise"); // join we need to match the course Join<Statistic, Course> course = statistic.join("courseTerm").join("course"); // create empty "and" predicate Predicate where = cb.conjunction(); // only non-empty Predicate notEmpty = cb.isFalse(statistic.get("empty")); where = cb.and(where, notEmpty);//from ww w. ja va 2 s. c o m // only statistics for courses that the instructor has access to Predicate hasInstructorAccessToCourse = cb.isTrue(cb.function("has_instructor_access_to_course", Boolean.class, course.get("id"), cb.literal(instructorId))); where = cb.and(where, hasInstructorAccessToCourse); // filter by courseId if (s.getCourseId() != 0) { Predicate courseMatches = cb.equal(course.get("id"), s.getCourseId()); where = cb.and(where, courseMatches); } // filter by student if (s.getStudent() != null) { Predicate studentMatches = cb.equal(statistic.get("student").get("id"), s.getStudent().getId()); where = cb.and(where, studentMatches); } cq.where(where); // order by date cq.orderBy(cb.desc(statistic.get("completedAt"))); return em.createQuery(cq).setMaxResults(limit).getResultList(); }
From source file:net.groupbuy.dao.impl.ProductDaoImpl.java
public List<Product> search(String keyword, Boolean isGift, Integer count) { if (StringUtils.isEmpty(keyword)) { return Collections.<Product>emptyList(); }/*from w w w . j a v a2s .c o m*/ CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Product> criteriaQuery = criteriaBuilder.createQuery(Product.class); Root<Product> root = criteriaQuery.from(Product.class); criteriaQuery.select(root); Predicate restrictions = criteriaBuilder.conjunction(); if (pattern.matcher(keyword).matches()) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.or(criteriaBuilder.equal(root.get("id"), Long.valueOf(keyword)), criteriaBuilder.like(root.<String>get("sn"), "%" + keyword + "%"), criteriaBuilder.like(root.<String>get("fullName"), "%" + keyword + "%"))); } else { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.or(criteriaBuilder.like(root.<String>get("sn"), "%" + keyword + "%"), criteriaBuilder.like(root.<String>get("fullName"), "%" + keyword + "%"))); } if (isGift != null) { restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("isGift"), isGift)); } criteriaQuery.where(restrictions); criteriaQuery.orderBy(criteriaBuilder.desc(root.get("isTop"))); return super.findList(criteriaQuery, null, count, null, null); }
From source file:eu.domibus.common.dao.MessageLogDao.java
public List<MessageLogEntry> findPaged(int from, int max, String column, boolean asc, HashMap<String, Object> filters) { CriteriaBuilder cb = this.em.getCriteriaBuilder(); CriteriaQuery<MessageLogEntry> cq = cb.createQuery(MessageLogEntry.class); Root<MessageLogEntry> mle = cq.from(MessageLogEntry.class); cq.select(mle);//from www. j a v a2 s. com List<Predicate> predicates = new ArrayList<Predicate>(); for (Map.Entry<String, Object> filter : filters.entrySet()) { if (filter.getValue() != null) { if (filter.getValue() instanceof String) { if (!filter.getValue().toString().isEmpty()) { switch (filter.getKey().toString()) { case "receivedFrom": predicates.add(cb.greaterThanOrEqualTo(mle.<Date>get("received"), Timestamp.valueOf(filter.getValue().toString()))); break; case "receivedTo": predicates.add(cb.lessThanOrEqualTo(mle.<Date>get("received"), Timestamp.valueOf(filter.getValue().toString()))); break; default: predicates.add(cb.like(mle.<String>get(filter.getKey()), (String) filter.getValue())); break; } } } else { predicates.add(cb.equal(mle.<String>get(filter.getKey()), filter.getValue())); } } } cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()]))); if (column != null) { if (asc) { cq.orderBy(cb.asc(mle.get(column))); } else { cq.orderBy(cb.desc(mle.get(column))); } } final TypedQuery<MessageLogEntry> query = this.em.createQuery(cq); query.setFirstResult(from); query.setMaxResults(max); return query.getResultList(); }