Temo che il suo non funzionerà. In base alla progettazione e alla natura del <join>
. Come indicato nella documentazione:
Il modo in cui (lo faccio) risolvere questo problema è un po' diverso. Ho un oggetto Language
, l'Opzione ha una raccolta di lingue
public virtual IList<Language> Languages {get; set;}
La mappatura è ad esempio <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>
Il trucco è nel filtro . Questa è una versione dinamica di dove mapping-attribute (18.1. Filtri NHibernate)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Quindi, possiamo attivare il filtro, per tutte le operazioni della sessione corrente. Solo una volta per richiesta (se app web), all'interno di alcuni AOP, di cui conosciamo l'id della lingua:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
E infine, sappiamo che la raccolta Languages contiene un solo record e possiamo sempre accedere a .First()
. Niente più risultati multipli con più lingue
Vedi anche:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310