mam następujące dwie tabele:NHibernate - Left dołącza
Praca Areaid, JobNo (klucz kompozytowe)
Dzienniki LogID, Areaid, JobNo
trzeba uzyskać wszystkie oferty pracy: które nie mają powiązanych z nimi dzienników. W SQL mogłem zrobić:
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
Ale nie jestem pewien, jak to osiągnąć z NHibernate. Czy ktokolwiek może zaoferować jakieś wskazówki?
Oto moje mapowania:
<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>
Dzięki
Aktualizuj
OK, zmodyfikowana odpowiedź nieznacznie Nosila, a to jest teraz robi to, co chciałem:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs,() => logs)
.Where(x => logs.Id == null)
.List<Job>();
Musiałem również dodać to do mojego zadania mapowanie:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
Dzięki za pomoc. :)
Czy możesz opublikować zapytanie, które już masz? – Nosila
Powyższe zapytanie SQL jest aktualnie tym, czego używam. Właśnie uczę się NH i próbuję przekonwertować małą aplikację na jej używanie. – Tom
Czy masz utworzone mapowania? Poza tym, ktoś mnie koryguje, jeśli się mylę, ale myślę, że potrzebujesz NHibernate 3.2, aby dodać warunki do swojego join (w każdym razie używając API 'QueryOver'). – Nosila