Только последняя запись из пользовательского запроса - PullRequest
0 голосов
/ 25 августа 2018

Следующий запрос возвращает список, но меня интересует только последний элемент списка.

@Query("SELECT r FROM Reservation r WHERE r.reservationSeance.id=:seanceId AND r.seanceDate=:seanceDate")
public Reservation findReservationBySeanceDateAndSeanceId(@Param("seanceId") int seanceId, @Param("seanceDate") java.time.LocalDate seanceDate);

Как мне переписать SQL-запрос для реализации моей идеи?

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Вам необходимо предоставить еще пару параметров для вашего запроса, особенно предложение ORDER BY.

Чтобы получить самую последнюю версию seanceId, вам нужно упорядочить результаты по этому идентификатору, но в обратном порядке. Затем просто скажите запросу, чтобы он возвращал только первый результат:

SELECT r FROM Reservation r 
WHERE r.reservationSeance.id=:seanceId 
AND r.seanceDate=:seanceDate 
ORDER BY seanceId 
DESC LIMIT 1;
0 голосов
/ 25 августа 2018

Одним из возможных решений является использование ORDER BY r.id DESC:

@Query("SELECT r FROM Reservation r  " +
        "WHERE r.reservationSeance.id=:seanceId AND r.seanceDate=:seanceDate " +
        "ORDER BY r.id DESC")
public Reservation findReservationBySeanceDateAndSeanceId(
        @Param("seanceId") int seanceId,
        @Param("seanceDate") java.time.LocalDate seanceDate, Pageable pageable);

, и поскольку в JPQL нет способа использовать лимит, вы можете использовать Pageable

Pageable pageable = new PageRequest(0, 1);
Reservation reservation = r.findReservationBySeanceDateAndSeanceId(seanceId, seanceDate, pageable);

Другое возможное решение без запроса:

public Reservation findTop1ByReservationSeanceAndSeanceDateOrderByIdDesc(
               ReservationSeanceEntity reservationSenace, 
               java.time.LocalDate seanceDate
)

В этом втором решении вы должны передать объект ReservationSeance, а не id из ReservationSeance, запрос можно прочитать как:

Find top 1 (first one) by `ReservationSeance` and `SeanceDate` order by `Id` Desc order
0 голосов
/ 25 августа 2018

Вы можете попробовать следующее, если вы используете mysql в качестве базы данных:

SELECT r 
FROM Reservation r 
WHERE r.reservationSeance.id=:seanceId 
  AND r.seanceDate=:seanceDate 
order by r.reservationSeance.id desc limit 0,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...