Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public List<PerformanceReport> getTopFiltered(TopPerformancesFilter filter,
- Pageable pageRequest) {
- CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
- CriteriaQuery<PerformanceReport>
- criteriaQuery =
- criteriaBuilder.createQuery(PerformanceReport.class);
- Root<Performance> performanceRoot = criteriaQuery.from(Performance.class);
- Join<Performance, Show> performanceShowJoin = performanceRoot.join("shows");
- Join<Show, Ticket> showTicketJoin = performanceShowJoin.join("tickets");
- Join<Ticket, TicketIdentifier>
- ticketTicketIdentifierJoin =
- showTicketJoin.join("ticketIdentifiers");
- // Select.
- criteriaQuery.select(criteriaBuilder
- .construct(PerformanceReport.class, performanceRoot.get("id"), performanceRoot.get("name"),
- criteriaBuilder.count(performanceRoot.get("id")).as(Integer.class)));
- // Prepare predicates.
- ArrayList<Predicate> predicates = new ArrayList<>();
- // FIXME: Sold ticket <=> ticketIdentifier.valid = true?
- predicates.add(criteriaBuilder.equal(ticketTicketIdentifierJoin.get("valid"), true));
- // Date filter.
- if (filter.getDateFrom() != null) {
- predicates.add(criteriaBuilder
- .greaterThanOrEqualTo(performanceShowJoin.get("dateOfPerformance"),
- filter.getDateFrom()));
- }
- if (filter.getDateTo() != null) {
- predicates.add(criteriaBuilder.lessThanOrEqualTo(performanceShowJoin.get("dateOfPerformance"),
- filter.getDateTo()));
- }
- // Apply the constraints.
- criteriaQuery.where(predicates.toArray(new Predicate[]{}));
- // Group by performanceId and order by number of sold tickets.
- criteriaQuery.groupBy(performanceRoot.get("id"));
- criteriaQuery.orderBy(criteriaBuilder.desc(criteriaBuilder.count(performanceRoot.get("id"))));
- // Create a query.
- TypedQuery<PerformanceReport> query = em.createQuery(criteriaQuery);
- // Optional pagination.
- if (pageRequest != null) {
- query.setFirstResult(pageRequest.getPageNumber() * pageRequest.getPageSize());
- query.setMaxResults(pageRequest.getPageSize());
- }
- // Run!
- return query.getResultList();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement