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

如何使用Nhibernate QueryOver连接两个非关系定义列的两个表,nhibernate,queryover,Nhibernate,Queryover,使用NHibernateQueryOver,我想使用映射中未定义为关系的两列连接两个表 这不是我的确切情况,但这可以解释这一点 表: Employee(Id, Name, DepartmentId, SomeCode,Address) Department (Id, Name, ,Code) 挑选 SELECT * FROM EMPLOYEE E JOIN DEPARTMENT D ON D.Code = E.SomeCode 有人能告诉我如何使用NHibernate

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

这不是我的确切情况,但这可以解释这一点

表:

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

Department (Id, Name, ,Code)
挑选

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

有人能告诉我如何使用NHibernate
QueryOver
进行此查询吗。请注意,
员工
中的“SomeCode”和
部门
中的“code”未定义为关系。DepartmentId是外键,我可以使用
JoinAlias
将它们连接起来,但我希望使用一种不同的方式

答案是:

  • 使用HQL或交叉连接(带WHERE)
  • 没有方法如何使用
    QueryOver
    /
    标准
  • 见文件:

    可能会出现多个类,导致笛卡尔乘积或“交叉”联接

    因此,在您的案例中使用HQL,我们可以这样做:

    SELECT ...
    FROM EMPLOYEE E, DEPARTMENT D 
    WHERE D.Code = E.SomeCode
    ...
    
    但我建议:在代码中创建映射。简单介绍
    多对一
    关系。它将被延迟加载(仅在使用时),并将很好地满足我们的需求-在
    QueryOver
    中用作
    Join


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

    谢谢您的建议。我(对NHibernate不熟悉)不太清楚如何按照您的建议在代码中引入关系。能给我一些提示吗。我们可以在我想要的地方加上那种关系,然后摆脱那种(暂时的关系)吗。有一个引用映射(员工部门,由
    property ref
    驱动。搜索它,它将为您提供答案;)享受NHibernate
    SELECT ...
    FROM EMPLOYEE E, DEPARTMENT D 
    WHERE D.Code = E.SomeCode
    ...