Reputation: 4090
Is there a way to specify additional conditions on outer joins in NHibernate when querying using QueryOver or ICriteria?
I need some extra conditions on the outer join-ed table, but NHibernate always adds them to the WHERE clause at the end - which does not get the correct behaviour (see http://weblogs.sqlteam.com/jeffs/archive/2007/05/14/criteria-on-outer-joined-tables.aspx).
I can't seem to find any way to do this using Criteria or the QueryOver syntax...
Thanks
Upvotes: 2
Views: 6264
Reputation: 1271
i tried the following query with query over
SystemUser systemUser= null;
SurveyRequests SurveyRequests = null;
var Query2 = Session.QueryOver<SystemUser>(() => systemUser)
.Left.JoinAlias(() => systemUser.SurveyRequests,
() => surveyRequest,
Restrictions.On(()=>surveyRequest.Survey.Id).IsIn(new object []{surveyID }))
Upvotes: 1
Reputation: 4090
(Answered my own question - sorry!)
Fabio answered a similar query on the NHibernate list - just thought I'd post it here.
That is possible with Criteria since NH3.0. The feature in HQL http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html
With Criteria have a look to CreateAlias(string associationPath, string alias, JoinType joinType, ICriterion withClause) CreateCriteria(string associationPath, string alias, JoinType joinType, ICriterion withClause)
With QueryOver it is not available but there's a JIRA for this here: https://nhibernate.jira.com/browse/NH-2592
Upvotes: 2
Reputation: 180
You probably figure out this long time ago. Solution is to add ICriteria parameter in JoinAlias method, like this:
Party aliasParty = null;
Party aliasPartyFrom = null;
var parties = QueryOver.Of<Party>(() => aliasParty)
.Left.JoinAlias(
() => aliasParty.AccountabilitiesFrom,
() => aliasAccFrom,
Restrictions.On(() => aliasAccFrom.TimeTo).IsNull)
I have restriction on aliasAccFrom, where i want that TimeTo is null, in last line of code.
Upvotes: 9