如何使用Nhibernate QueryOver连接两个非RELshinship定义列的两个表

时间:2015-02-24 06:46:38

标签: nhibernate queryover

使用NHibernate QueryOver,我想使用两个列连接两个表,这两个列未在映射中定义为关系。

E.g。这不是我的确切场景,但这可以解释

表:

Employee(Id, Name, DepartmentId, SomeCode,Address)

Department (Id, Name, ,Code)

选择

SELECT * 
  FROM EMPLOYEE E 
  JOIN DEPARTMENT D 
    ON D.Code = E.SomeCode

有人可以告诉我如何使用NHibernate QueryOver进行此查询。请注意,Employee中的“SomeCode”和Department中的“代码”未定义为关系。 DepartmentId是外键,我可以使用JoinAlias加入它们,但我想以一种不同的方式加入它们。

1 个答案:

答案 0 :(得分:1)

有类似的问题,例如

答案是:

  1. 使用 HQL 和CROSS JOIN(使用WHERE)
  2. 使用QueryOver / Criteria
  3. 的方式做到这一点

    参见文档:

    14.2. The from clause

      

    可能会出现多个班级,导致产生笛卡尔积或“#34; cross"加入。

    from Formula, Parameter
    
    from Formula as form, Parameter as param
    

    所以在你的情况下使用HQL,我们可以这样做:

    SELECT ...
    FROM EMPLOYEE E, DEPARTMENT D 
    WHERE D.Code = E.SomeCode
    ...
    

    但我建议:在代码中创建该映射。简单介绍many-to-one关系。它将被懒惰地加载(仅在使用时)并且很好地满足我们的需求 - 在QueryOver中用作Join的关系

    如果存在这样的关系,如果在业务对象域中存在这种关系,我们就不应该害怕使用它。我们可以通过安全等隐藏它......