Ik ben bang dat hij niet zal werken. Door het ontwerp en de aard van de <join>
. Zoals vermeld in de documentatie:
De manier om (ik doe) dit probleem oplossen is een beetje anders. Ik heb een object Language
, de optie heeft een verzameling talen
public virtual IList<Language> Languages {get; set;}
De toewijzing is bijvoorbeeld <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>
De truc zit in het filter . Dit is een dynamische versie van de waar mapping-attribuut (18.1. NHibernate-filters)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Vervolgens kunnen we het filter inschakelen voor alle bewerkingen van de huidige sessie. Slechts één keer per verzoek (indien web-app), binnen een AOP, waar we de taal-ID kennen:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
En tot slot weten we dat de verzameling Talen slechts één record bevat en dat we altijd toegang hebben tot .First()
. Geen meerdere resultaten meer met meer talen
Zie ook:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310