asp.net - NHibernate Collection Left Outer Join Where Clause Issue -
it seems when using following nhibernate query, not root entity when left outer join has no records.
icriteria critera = session.createcriteria(typeof(entity)); criteria.createcriteria("subtable.property", "property", nhibernate.sqlcommand.jointype.leftouterjoin); criteria.add(expression.not(expression.eq("property", value)));
the sql trying generate is:
select * basetable left join ( select * subtable property <> value )sub on sub.foreignkey = basetable.primarykey
notice clause inside left join's select statement. way if there arent maching sub records, still top level record. seems nhibernate producing following sql.
select * basetable left join ( select * subtable )sub on sub.foreignkey = basetable.primarykey sub.property <> value
is there anyway achieve first piece of sql? have tried:
icriteria critera = session.createcriteria(typeof(entity)); criteria.createcriteria("subtable.property", "property", nhibernate.sqlcommand.jointype.leftouterjoin); criteria.add( restrictions.disjunction() .add(expression.isnull("property")) .add(expression.not(expression.eq("property", value)));
i looking solution using criteria api.
try this:
var hql = @"select bt basetable bt left join bt.subtable subt subt.property <> :property";
or perhaps:
var hql = @"select bt basetable bt left join bt.subtable subt subt.foreignkey = bt.primarykey , subt.property <> :property";
finally:
var result = session.createquery(hql) .setparameter("property", "whatevervalue") .list<basetable>();
Comments
Post a Comment