Страхувам се, че неговият няма да работи. По дизайн и естеството на <join>
. Както е посочено в документацията:
Начинът, по който да (аз правя) решаването на този проблем е малко по-различно. Имам обект Language
, опцията има колекция от езици
public virtual IList<Language> Languages {get; set;}
Съответствието е например <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>
Номерът е във филтърната . Това е динамична версия на къде mapping-attribute (18.1. NHibernate филтри)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
След това можем да включим филтъра за всички операции от текущата сесия. Само веднъж на заявка (ако е уеб приложение), в някои AOP, където знаем идентификатора на езика:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
И накрая, знаем, че колекцията Languages съдържа само един запис и винаги имаме достъп до .First()
. Няма повече множество резултати с повече езици
Вижте също:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310