Obávám se, že ten jeho nebude fungovat. Podle návrhu a povahy <join>
. Jak je uvedeno v dokumentaci:
Způsob, jak (dělám) vyřešit tento problém je trochu jiné. Mám objekt Language
, Možnost má kolekci jazyků
public virtual IList<Language> Languages {get; set;}
Mapování je například <bag>
<bag name="Languages" batch-size="25"
cascade="all-delete-orphan" inverse="true" >
<key column="option_id" />
<one-to-many class="Language" />
<filter name="LanguagFilter" condition=":languageId = LanguageId" />
</bag>
Trik je ve filtru . Toto je dynamická verze kde mapping-attribute (18.1. NHibernate filtry)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Poté můžeme zapnout filtr pro všechny operace aktuální relace. Pouze jednou na požadavek (pokud jde o webovou aplikaci), uvnitř nějakého AOP, kde známe ID jazyka:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
A konečně víme, že kolekce Languages obsahuje pouze jeden záznam a vždy máme přístup k .First()
. Už žádné vícenásobné výsledky s více jazyky
Viz také:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310