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

nhibernate hql join未返回所有必需的行

  •  2
  • James  · 技术社区  · 15 年前

    我正在修改一个现有的hql查询,它返回单个列,而不是对象图,但现在我没有得到我需要的所有行。

    下面是关于当前模式的一些事实:

    • 估价属于合同。
    • 合同的OwningDepartment属性可以为空。
    • 部门的ParentBusinessStream属性不能为空

    这是一个查询:

    select e.ID, e.StatusCode.ID, e.InputDate, e.ParentClient.Name, e.ParentContractLocation.ParentLocation.Description, e.Description, e.InternalRef, e.ExternalRef, e.TotalIncTax, e.TaxTotal, e.Closed, e.ViewedByClient, e.HelpdeskRef, e.ParentContract.Reference, d.ParentBusinessStream.Title, d.Name
    from Estimate e, Department d where (e.ParentContract.ID in (select cs.ParentContract.ID from ContractStaff cs
    where cs.ParentStaff.ID=:staffID)) and ((d.ID = e.ParentContract.OwningDepartment.ID) OR (d.ID is null)) order by e.ID
    

    不幸的是,我的查询没有返回父合同没有所属部门的估计值。相反,我希望相关字段为空。我尝试了左外部联接,但得到了相同的结果。

    任何帮助都将不胜感激。如果我做了一些愚蠢的事,请道歉。

    干杯,

    詹姆斯

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jaguar    15 年前

    我发现,通过使用ISQLQuery,包含左外部联接的异常查询会更好一些,它使您能够访问正确的SQL语法和一些HQL功能。

    除此之外,您不提供通常有用的映射文件

        2
  •  0
  •   James    15 年前

    我想我已经解决了:d.parentbusinessstream.title是一个隐式的内部联接,但是由于d可以为空,所以它不能正常工作。我已更改了我的查询以考虑到这一点