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

How to join Two tables of two non relashinship defined columns using Nhibernate QueryOver

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

例如这不是我的确切情况,但这可以解释

表格:

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

Department (Id, Name, ,Code)

Select

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

谁能告诉我如何使用 NHibernate 执行此查询 QueryOver。请注意,Employee 中的 "SomeCode" 和 Department 中的 "Code" 未定义为关系。 DepartmentId 是外键,我可以使用 JoinAlias 加入它们,但我希望以一种稍微不同的方式加入它们。

还有类似的问题,例如

  • NHibernate (+ FluentNhibernate) : Join two detached tables
  • Hibernate Criteria Projection without mapped association of tables

答案是:

  1. 使用 HQL 和 CROSS JOIN(带 WHERE)
  2. NO 方法 QueryOver/Criteria)

查看文档:

14.2. The from clause

Multiple classes may appear, resulting in a cartesian product or "cross" join.

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

的关系

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