0

次のSQLクエリ:

select distinct hotel.country 'Country', hotel.id 'Hotel ID', hotel.Name'Name', room.id 'Room ID'
from room, stay, reservation, hotel
where
(stay.roomid = room.id) 
and (stay.reservationid = reservation.id) 
and (reservation.status != 'Booked' AND reservation.status != 'CheckedIn')
and (reservation.arrivaldate >= '2012-08-08')
and (reservation.leavedate <= '2012-08-15')
and (room.hotelid = hotel.id)
order by hotel.country, hotel.id, hotel.name, room.id asc

これにより、国ごとのホテルごとに利用可能な部屋のリストが表示されます。これをHQLに入れる必要がありますが、これが原因でできません。

Query query = session.createQuery("from room, stay, reservation, hotel where stay.roomid = room.id");

stay.roomidこれは、Roomオブジェクトであるのに対し、room.id単なる整数であるため、機能しません。私はHibernate/HQLにかなり慣れていませんが、リファレンスマニュアルでは実際にはどこにも行きませんでした...このSLQクエリをHQLステートメントに「変換」するにはどうすればよいですか(怖い言葉ですが、実際の変換は含まれていません)。 ?ありがとう。

アップデート

結合を使用すると、同じ問題が発生します

Query query = session.createQuery("" +
                    "from Stay stay " +
                    "join stay.ReservationID reservation " +
                    "join stay.RoomID room " +
                    "join room.HotelID hotel " +
                    "where (stay.RoomID = room.ID)");

私はここで何か(おそらく非常に論理的)が本当に欠けています...

4

1 に答える 1

1

エンティティは表示されていませんが、SQL で結合を使用する場合と同様に、HQL で結合を使用する必要があります。

select ...
from Stay stay
join stay.reservation reservation
join stay.room room
join rom.hotel hotel
where (reservation.status != 'Booked' AND reservation.status != 'CheckedIn')
and (reservation.arrivaldate >= '2012-08-08')
and (reservation.leavedate <= '2012-08-15')

Hibernate のドキュメントには、HQL に関する章全体と、この章のHQL での関連付けに関するセクションがあります。

于 2012-08-07T13:19:53.227 に答える