【发布时间】:2012-03-06 19:07:50
【问题描述】:
我有以下两张表:
工作 AreaID、JobNo(复合键)
日志 LogID、AreaID、JobNo
我需要获取所有没有与之关联的日志的作业。在 SQL 中我可以这样做:
SELECT Jobs.AreaID,
Jobs.JobNo
FROM Jobs
LEFT JOIN Logs
ON Jobs.AreaID = Logs.AreaID
AND Jobs.JobNo = Logs.JobNo
WHERE Logs.LogID is null
但我不确定如何使用 NHibernate 来实现这一点。有没有人可以指点一下?
这是我的映射:
<class name="Job" table="Jobs">
<composite-key name="Id">
<key-property name="JobNo"/>
<key-many-to-one name="Area" class="Area" column="AreaID"/>
</composite-key>
</class>
<class name="Log" table="Logs">
<id name="Id" column="LogID">
<generator class="identity"/>
</id>
<property name="JobNo"/>
<many-to-one name="Area" class="Area" column="AreaID"/>
</class>
谢谢
更新
好的,我稍微修改了 Nosila 的答案,这就是我想要的:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs, () => logs)
.Where(x => logs.Id == null)
.List<Job>();
我还必须将此添加到我的工作映射中:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
感谢您的帮助。 :)
【问题讨论】:
-
您可以发布您现在的查询吗?
-
上面的SQL查询是我目前使用的。我现在正在学习 NH,并正在尝试将一个小型应用程序转换为使用它。
-
您是否创建了映射?另外,如果我错了,有人纠正我,但我认为您需要 NHibernate 3.2 才能为您的加入添加条件(无论如何使用
QueryOverAPI)。 -
是的,我已经在上面包含了我的映射。
标签: nhibernate join left-join outer-join