我試圖做一個LEFT JOIN在Hibernate查詢語言,MySQL中我能做到這一點,如下所示:LEFT JOIN在Hibernate查詢語言
SELECT * FROM day_timetable_timeslots牛逼LEFT JOIN golfnine_date_time_entity d ON d.start_time = t.start_time
在我的表day_timetable_timeslots我有很多時間間隔爲15分鐘的增量全天。例如。 00:00:00,00:15:00,00:30:00,...到一天結束。 因此,它顯示我與任何匹配golfnine_date_time_entity的所有時間間隔,但我似乎無法解決如何在Hibernate查詢語言中執行此操作。
那麼我可以通過以下HQL做LEFT JOIN。
選擇o.id,book.id從DayTimetableTimeslotsØ左外連接o.bookings本書,o.id> 0
我不知道爲什麼我必須把o.id> 0在那裏,但它的作品。
但是,我只想選擇book.id的預訂有哪裏條件的地方。 我想:
選擇o.id,book.id從DayTimetableTimeslotsØ左外連接o.bookings本書,o.id> 0和book.dateTime.startDate> '2010-01-01'
但是這不能正常工作,它只顯示一些DayTimetableTimeslots,但不是所有的,因爲它應該這樣做。
我基本上想在HQL中做這個mysql查詢。
從day_timetable_timeslots選擇t.id如start_time_sequence,t.start_time如all_start_time,d。* T LEFT JOIN golfnine_date_time_entity d ON d.start_time = t.start_time AND t.customer_id = d.customer_id AND d.start_date =「2010 -01-24' WHERE t.customer_id = 11
謝謝你,菲利普
在MySQL中我可以做以下的,它表明了我對他們的啓動時間所有預訂。所有開始時間都存儲在day_timetable_timeslots中。
選擇t.start_time,d.id從day_timetable_timeslots牛逼LEFT JOIN golfnine_date_time_entity d ON d.start_time = t.start_time
'00:00:00', NULL
'00:15:00', NULL
'00:30:00', NULL
'00:45:00', NULL
'01:00:00', '443'
'01:15:00', NULL
'01:30:00', NULL
'01:45:00', NULL
'02:00:00', '444'
...了整整一天,它golfnine_date_time_entity的ID相匹配與day_timetable_timeslots中的時間。
關於這個mysql查詢的好處是我可以在預訂上設置一些標準,例如。
從day_timetable_timeslots中選擇t.id,t.start_time,d.id t LEFT JOIN golfnine_date_time_entity d ON d.start_time = t.start_time AND t.customer_id = d.customer_id AND d.start_date ='2010-01-24 '哪裏。CUSTOMER_ID = 11
我得到
... lots of data then
'31', '07:15:00', NULL
'32', '07:30:00', NULL
'33', '07:45:00', NULL
'34', '08:00:00', '501'
'35', '08:15:00', NULL
'36', '08:30:00', NULL
'37', '08:45:00', NULL
'38', '09:00:00', NULL
'39', '09:15:00', NULL
... lots more data
因此,它只能顯示在指定的日期和用戶ID預訂。
其所以很難做到這一點HQL ...
這是加盟我想在HQL。
選擇o.id,b.id從DayTimetableTimeslots O,LegacyDateTimeEntity b其中b.customer.id = 11和b.startDate = '2010-02-07' 和o.startTime = b.startTime
給出這個SQL。
select
daytimetab0_.id as col_0_0_,
legacydate1_.id as col_1_0_
from
day_timetable_timeslots daytimetab0_,
golfnine_date_time_entity legacydate1_
where
legacydate1_.customer_id=11
and legacydate1_.start_date='2010-02-07'
and daytimetab0_.start_time=legacydate1_.start_time
但是 - 這不僅是因爲只有一個golfnine_date_time_entity匹配,則返回1行,我想所有的行返回的day_timetable_timeslots的。
所以我嘗試了HQL。
從DayTimetableTimeslots中選擇o.id,o.bookings.size o left join o.bookings book left join book.dateTime dt with dt.customer.id = 11 and dt.startDate ='2010-02-29'where 1 = 1
這可悲似乎忽略了與表達。
它返回這個SQL。
select
daytimetab0_.id as col_0_0_,
(select
count(bookings3_.timeslot_id)
from
golfnine_booking bookings3_
where
daytimetab0_.id=bookings3_.timeslot_id) as col_1_0_
from
day_timetable_timeslots daytimetab0_
left outer join
golfnine_booking bookings1_
on daytimetab0_.id=bookings1_.timeslot_id
left outer join
golfnine_date_time_entity legacydate2_
on bookings1_.date_time_id=legacydate2_.id
and (
legacydate2_.customer_id=11
and legacydate2_.start_date='2010-02-29'
)
where
1=1
剛剛加入表之間的所有匹配的關係,而忽略 legacydate2_.customer_id = 11 和legacydate2_.start_date = '2010年2月29日'
我發現,這似乎工作。注意我正在引用dt2,它在with子句中。
從DayTimetableTimeslots中選擇不同的o.startTime,dt2.id,book.uniqueDateTimeResource o將book.deleted = 0的book加入到book.deleted = 0左邊加入book.dateTime dt2 with dt2.startDate ='2010-01-19'和dt2.deleted = 0
您可以顯示您的HQL生成的SQL,以及一些帶有輸出結果和期望輸出的示例數據嗎? – RMorrisey 2010-08-15 15:56:03
謝謝,我對我的問題添加了更多評論。 – Phil 2010-08-15 16:10:31