, . ProjectSponsors, , , ProjectSponsors .
, "Joe" , ProjectSponsors . ?
, . , , Fetch.
, "Where". , , . :
Session.Query<Project>().FetchMany(r => r.ProjectSponsors).ThenFetch(r => r.Sponsor).Where(s => s.Name == "Joe")
SQL ? - :
SELECT
*
FROM
Project P
LEFT JOIN ProjectSponsors PS ON PS.ProjectId = P.ProjectId
LEFT JOIN Sponsors S ON S.SponsorId = PS.SponsorId
WHERE
S.Name = 'Joe'
, , , .
ProjectSponsors, , Joe.
, , . ProjectSponsors Project :
<class name="Project" table="Project">
...
<set name="ProjectSponsors" table="ProjectSponsor">
<key column="ProjectId" />
<one-to-many class="ProjectSponsor" />
<filter name="SponsorName" condition="EXISTS (SELECT * FROM Sponsor where Sponsor.SponsorId = SponsorId AND Sponsor.Name=:name)" />
</set>
</class>
<filter-def name="SponsorName">
<filter-param name="name" type="String"/>
</filter-def>
:
Session.EnableFilter("SponsorName").SetParameter("name", "Joe");
var projects = Session.Query<Project>().FetchMany(r => r.ProjectSponsors).ThenFetch(r => r.Sponsor);
SQL :
SELECT
*
FROM
Project P
LEFT JOIN ProjectSponsors PS ON PS.ProjectId = P.ProjectId AND EXISTS (SELECT * FROM Sponsor where Sponsor.SponsorId = PS.SponsorId AND Sponsor.Name = 'Joe')
LEFT JOIN Sponsors S ON S.SponsorId = PS.SponsorId
, ProjectSponsor, Joe .
, , , .