nhibernate - Criteria API With clause in many-to-many relationship -
nhibernate 3 introduced clause criteria api. i'm trying use restrict join on many-to-many relationship , nhibernate applying additional join restriction linking table rather correct table.
i have many-to-many relationship between player , address , want return player , mailing address restricting address.ismailingaddress. restricting ismailingaddress in clause not return records not have mailing address (or no address @ all), need restrict in join. code below simplified , can't use hql.
the query:
var target = session.createcriteria<player>() .setprojection(projections.property("playerid")) .createalias("addresses", "ad", jointype.leftouterjoin, restrictions.eq("ad.ismailingaddress", true)) .add(restrictions.eq("lastname", "anonymous")) .list();
generates sql:
select this_.playerid y0_ dbo.vplayerexisting this_ left outer join dbo.linkplayaddr addresses3_ on this_.playerid = addresses3_.playerid , (ad1_.mailingaddressflag = 1 /* @p0 */) left outer join dbo.vaddress ad1_ on addresses3_.addressid = ad1_.addressid , (ad1_.mailingaddressflag = 'anonymous' /* @p1 */) this_.name_last = @p2
mailingaddressflag (the column that's mapped ismailingaddress) restricted in many-to-many linking table doesn't exist , lastname restriction applied in join address table. query issued of course database server raises exception.
is bug, unsupported or doing wrong?
var target = session.createcriteria<player>() .createalias("addresses", "ad", jointype.innerjoin) .add(restrictions.eq("lastname", "anonymous")) .add(restrictions.eq("ad.ismailingaddress",true)) .list();
just inner join mailing address restriction on ismailingaddress?
should bring players (where lastname "anonymous") mailingaddress have address , address flagged ismailingaddress.
Comments
Post a Comment