2013-02-02 122 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 
) 

您的代码将更加清晰。每个实例都是单个房间,所以它应该使用单数形式。