2013-02-02 175 views
0

我期待下面的SQL轉換成JPQL:如何寫這個SQL查詢中JPQL

SELECT * 
FROM rooms 
WHERE NOT EXISTS 
(  
    SELECT * 
    FROM booking, booking_has_rooms 
    WHERE rooms.number=booking_has_rooms.rooms_number AND 
      booking.booking_id=booking_has_rooms.booking_booking_id AND 
      :date BETWEEN booking.checkin AND booking.checkout 
); 

到目前爲止,我有這樣的:

SELECT rooms 
FROM Rooms rooms 
WHERE NOT EXISTS 
(
    SELECT bk 
    FROM Booking b 
    JOIN b.roomsCollection bk 
    WHERE :date BETWEEN b.checkin AND b.checkout 
) 

它正確,如果返回所有的房間沒有預訂是在指定的日期。 但是,如果任何預訂在指定的日期 - 它根本不返回任何房間。

回答

1

你錯過了在內部查詢的條款:如果您重命名房間到房間

SELECT rooms 
FROM Rooms rooms 
WHERE NOT EXISTS 
(
    SELECT bk 
    FROM Booking b 
    JOIN b.roomsCollection bk 
    WHERE :date BETWEEN b.checkin AND b.checkout 
    and bk.id = rooms.id 
) 

您的代碼將更加清晰。每個實例都是單個房間,所以它應該使用單數形式。