我有以下两个表:
作业 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
Run Code Online (Sandbox Code Playgroud)
但我不知道如何用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>
Run Code Online (Sandbox Code Playgroud)
谢谢
更新
好的,我略微修改了诺西拉的答案,现在正在做我想要的事情:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs, () => logs)
.Where(x => logs.Id == null)
.List<Job>();
Run Code Online (Sandbox Code Playgroud)
我还必须将此添加到我的Job映射中:
<bag …Run Code Online (Sandbox Code Playgroud)