Как реализовать JPQL-запрос? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть рабочий запрос в PostgreSQL:

select s.id, s.seat_number as available_seat, s.row_number as available_row, rm.room_name as screening_room
from seats s
         join rooms rm on rm.id=s.room_id
         left join (
    select r.seat_id from reserved_seats r
                              join reservations  res on res.id=r.reservation_id AND res.screening_id = 3 ) res on res.seat_id=s.id
where res.seat_id is null AND s.room_id=3
ORDER BY s.id;

Но я допускаю ошибки при переводе его на язык запросов JPA.

enter image description here

Могу ли я использовать вложенные SELECT в JPQL?

Ответ - использовать собственный запрос :

@Query(value =
            "SELECT s.id seatId, s.seat_number availableSeat, " +
                    "s.row_number availableRow, rm.name screeningRoom \n" +
                    "FROM seats s\n" +
                    "JOIN rooms rm on rm.id=s.room_id\n" +
                    "   LEFT JOIN (\n" +
                    "       SELECT r.seat_id FROM reserved_seats r\n" +
                    "       JOIN reservations res ON res.id=r.reservation_id " +
                    "       AND res.screening_id = :screeningId) res ON res.seat_id=s.id\n" +
                    "WHERE res.seat_id IS NULL AND s.room_id=:roomId AND s.row_number=:rowNumber\n" +
                    "ORDER BY s.id;", nativeQuery = true)

1 Ответ

0 голосов
/ 16 апреля 2020

Ответ должен использовать собственный запрос :

@Query(value =
            "SELECT s.id seatId, s.seat_number availableSeat, " +
                    "s.row_number availableRow, rm.name screeningRoom \n" +
                    "FROM seats s\n" +
                    "JOIN rooms rm on rm.id=s.room_id\n" +
                    "   LEFT JOIN (\n" +
                    "       SELECT r.seat_id FROM reserved_seats r\n" +
                    "       JOIN reservations res ON res.id=r.reservation_id " +
                    "       AND res.screening_id = :screeningId) res ON res.seat_id=s.id\n" +
                    "WHERE res.seat_id IS NULL AND s.room_id=:roomId AND s.row_number=:rowNumber\n" +
                    "ORDER BY s.id;", nativeQuery = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...