Мой текущий запрос подсчитывает все билеты, проданные на каждое мероприятие, и перечисляет каждое мероприятие с наибольшим количеством билетов по убыванию. Теперь проблема в том, что мне нужно получить все билеты за последний месяц, и я просто не могу получить нужный результат из JPArepo Doc. Только. Текущий запрос выглядит так:
@Query("select t.event.id, count(t.id) from Ticket t where t.event.seat = True group by t.event.id order by count(id) desc")
Я думаю, где после «Истина» и до того, как должна быть реализована группировка, но я просто не знаю, как это сделать. Я был бы очень рад, если бы кому-нибудь из вас удалось мне помочь!
Обновлено: забыл упомянуть, что текущая дата события называется просто «датой», поэтому для доступа к ней необходимо просто t.event.date.
Измените свой запрос на что-то вроде этого:
@Query("select t.event.id, count(t.id) from Ticket t where t.event.seat = ?1 and t.event.date >= ?2 group by t.event.id order by count(t.id) desc")
List<?> getEventCount(Boolean seatTaken, Date eventDate);
Я изменил запрос, чтобы место было логическим параметром (для повторного использования, если вы хотите найти места, которые не были заняты), и добавил в параметр Date
.
Затем вычислите дату месяц назад как таковую:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date date = cal.getTime();
И, наконец, реализуем новый метод:
List<?> results = repo.getEventCount(true, date);
Чтобы создать класс Service весной и собрать все вместе, попробуйте что-нибудь вроде:
@Service
public class TicketService {
@Autowired
private TicketRepository repo;
public List<?> getTicketEventCount() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date date = cal.getTime();
List<?> results = repo.getEventCount(true, date);
return results;
}
}
Ознакомьтесь с документацией Spring JPA. Это длинно (слишком много, чтобы публиковать здесь), но хороший исходный материал для начала docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/…
Я действительно сделал! Моя проблема заключается в том, что все примеры находятся в интерфейсе репозитория. Мой вопрос: нужно ли реализовывать новую службу только для этих трех строк кода? Или, может быть, есть способ написать все это в одном запросе без необходимости в этих трех строках календаря?
Вам нужно будет вычислить часть «месяц назад», прежде чем использовать ее в своем запросе, другой альтернативой является запись хранимой процедуры в вашей базе данных, которая может это сделать. См. Мое редактирование, чтобы показать услугу.
Я действительно новичок в JPA. Чтобы реализовать предложенную вами реализацию, мне нужно было бы создать класс службы, реализующий репозиторий, верно? Как именно это делается с помощью Spring?