代码之家  ›  专栏  ›  技术社区  ›  RSlaughter

HQL中的NHibernate连接数据

  •  1
  • RSlaughter  · 技术社区  · 16 年前

    我用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
    

    谢谢!

    0 回复  |  直到 16 年前