Advertisement
Guest User

Untitled

a guest
May 17th, 2016
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.23 KB | None | 0 0
  1.   @Override
  2.   public List<PerformanceReport> getTopFiltered(TopPerformancesFilter filter,
  3.                                                 Pageable pageRequest) {
  4.     CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
  5.     CriteriaQuery<PerformanceReport>
  6.         criteriaQuery =
  7.         criteriaBuilder.createQuery(PerformanceReport.class);
  8.     Root<Performance> performanceRoot = criteriaQuery.from(Performance.class);
  9.     Join<Performance, Show> performanceShowJoin = performanceRoot.join("shows");
  10.     Join<Show, Ticket> showTicketJoin = performanceShowJoin.join("tickets");
  11.     Join<Ticket, TicketIdentifier>
  12.         ticketTicketIdentifierJoin =
  13.         showTicketJoin.join("ticketIdentifiers");
  14.     // Select.
  15.     criteriaQuery.select(criteriaBuilder
  16.         .construct(PerformanceReport.class, performanceRoot.get("id"), performanceRoot.get("name"),
  17.             criteriaBuilder.count(performanceRoot.get("id")).as(Integer.class)));
  18.     // Prepare predicates.
  19.     ArrayList<Predicate> predicates = new ArrayList<>();
  20.     // FIXME: Sold ticket <=> ticketIdentifier.valid = true?
  21.     predicates.add(criteriaBuilder.equal(ticketTicketIdentifierJoin.get("valid"), true));
  22.     // Date filter.
  23.     if (filter.getDateFrom() != null) {
  24.       predicates.add(criteriaBuilder
  25.           .greaterThanOrEqualTo(performanceShowJoin.get("dateOfPerformance"),
  26.               filter.getDateFrom()));
  27.     }
  28.     if (filter.getDateTo() != null) {
  29.       predicates.add(criteriaBuilder.lessThanOrEqualTo(performanceShowJoin.get("dateOfPerformance"),
  30.           filter.getDateTo()));
  31.     }
  32.     // Apply the constraints.
  33.     criteriaQuery.where(predicates.toArray(new Predicate[]{}));
  34.     // Group by performanceId and order by number of sold tickets.
  35.     criteriaQuery.groupBy(performanceRoot.get("id"));
  36.     criteriaQuery.orderBy(criteriaBuilder.desc(criteriaBuilder.count(performanceRoot.get("id"))));
  37.     // Create a query.
  38.     TypedQuery<PerformanceReport> query = em.createQuery(criteriaQuery);
  39.     // Optional pagination.
  40.     if (pageRequest != null) {
  41.       query.setFirstResult(pageRequest.getPageNumber() * pageRequest.getPageSize());
  42.       query.setMaxResults(pageRequest.getPageSize());
  43.     }
  44.     // Run!
  45.     return query.getResultList();
  46.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement