我用NHibernate映射了以下两个表:
车辆检查
ID (int)
VehicleReg (varchar)
DriverName (varchar)
TS (datetime)
ID (int)
VehicleCheckID (int)
CheckType (int)
Passed (bit)
我要做的是使用HQL或Criteria API为每辆车获取最新的车辆检查,并为每辆车获取失败的车辆检查计数。
在SQL中,这看起来像:
select VehicleCheck.ID, VehicleCheck.VehicleReg, VehicleCheck.DriverName,
VehicleCheck.TS, CheckItems.FailCount
FROM VehicleCheck
JOIN
(select VehicleReg, Max(TS) TS
FROM VehicleCheck
GROUP BY VehicleReg) LastChecks
ON LastChecks.VehicleReg = VehicleCheck.VehicleReg and LastChecks.TS = VehicleCheck.TS
LEFT OUTER JOIN
(select VehicleCheckID, Count(Passed) FailCount
FROM VehicleCheckItem
Where Passed = 0
GROUP BY VehicleCheckID) CheckItems
on CheckItems.VehicleCheckID = VehicleCheck.ID
在HQL我该怎么做?HQL是否支持连接中的子查询?
我做到了:
select vehicleCheck.ID, vehicleCheck.DriverName, vehicleCheck.VehicleReg, max(vehicleCheck.TS),
count(vehicleCheckItems.Passed)
from VehicleCheck vehicleCheck
join vehicleCheck.VehicleCheckItems vehicleCheckItmes
group by vehicleCheck.VehicleReg
谢谢!