NHibernate在HQL中加入数据

时间:2010-02-15 15:23:43

标签: c# .net nhibernate hql

我在NHibernate中映射了以下两个表:

VehicleCheck

ID (int) 
VehicleReg (varchar) 
DriverName (varchar) 
TS (datetime)

VehicleCheckItem

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

其中包含车辆登记最近车辆检查的ID,VehicleReg,DriverName,TS和FailCount。

我如何在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

这给了我几乎正确的结果,但是VehicleReg的组导致VehicleCheckItems的计数是每Reg而不是每次检查是否有意义。

谢谢!

0 个答案:

没有答案