【问题标题】:How to implement JPQL query?如何实现 JPQL 查询?
【发布时间】:2020-06-26 20:23:17
【问题描述】:

我在 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 查询语言时出错。

我可以在 JPQL 中使用嵌套的 SELECT 吗?

答案是使用原生查询

@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)

【问题讨论】:

  • 阅读 jpql。 ist 与 sql 不同。
  • 它适用于不在桌子上的对象。
  • 不要在问题中放置不必要的图像。您的复制粘贴也适用于文本。
  • @Kayaman 显示我的错误...
  • @Jens 阅读了我的查询,它在对象上

标签: java sql jpa jpql


【解决方案1】:

答案是使用原生查询

@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)

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2019-03-19
    • 1970-01-01
    • 2019-07-13
    • 2018-01-05
    • 2011-04-07
    • 2011-02-20
    • 2014-10-26
    • 2021-04-03
    相关资源
    最近更新 更多