如何使用 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
答案是:
- 使用 HQL 和 CROSS JOIN(带 WHERE)
- 有 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
的关系
如果有这样的关系,如果这个存在于业务对象域中,我们应该不会害怕使用它。我们可以通过安全等方式隐藏它...
使用 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
答案是:
- 使用 HQL 和 CROSS JOIN(带 WHERE)
- 有 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
如果有这样的关系,如果这个存在于业务对象域中,我们应该不会害怕使用它。我们可以通过安全等方式隐藏它...