QueryOver - добавление дополнительных критериев в объединение - PullRequest
3 голосов
/ 02 марта 2012

Я довольно новичок в NHibernate и QueryOver, и я не могу заставить NHibernate генерировать необходимый мне SQL.

Мне нужно сделать соединение и иметь дополнительные критерии, чтобы избежать получения большого количества данных из таблицы, к которой я присоединяюсь.

SQL-запрос, полученный от QueryOver:

SELECT * FROM adresse this_ 
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid 
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid 
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id 
WHERE  this_.id = 16633 and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35'

То, что я хотел бы, это (где дата была перенесена в конец для первого левого внешнего соединения):

SELECT * FROM adresse this_ 
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35'
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid 
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id 
WHERE  this_.id = 16633

Мой QueryOver выглядит так:

adr = session.QueryOver<Address>()
    .Where(x => x.Id == 16633)
    .JoinQueryOver<Remark>(y => y.Remarks).Where(y => y.Created > DateTime.Now.AddDays(-14))
    .JoinAlias(y => y.RemarkComplaint, () => complaintAlias, JoinType.LeftOuterJoin)
    .SingleOrDefault();

Кто-нибудь получил представление о том, как это исправить?

1 Ответ

1 голос
/ 03 марта 2012

Существует несколько перегрузок для joinqueryover - я полагаю, вы хотите что-то вроде:

Remark remark = null;
adr = session.QueryOver<Address>()
    .Where(x => x.Id == 16633)
    .JoinQueryOver<Remark>(y => y.Remarks, () => remark, y => y.Created > DateTime.Now.AddDays(-14))
    .JoinAlias(y => y.RemarkComplaint, () => complaintAlias, JoinType.LeftOuterJoin)
    .SingleOrDefault();

В этом случае третьим параметром является withClause, который, я полагаю, добавит ограничение к объединению.

...