Estou com medo, que o dele não vai funcionar. Por design e pela natureza do
<join>
. Conforme consta na documentação:A maneira como (eu faço) resolver este problema é um pouco diferente. Eu tenho um objeto
Language
, a opção tem coleção de idiomas public virtual IList<Language> Languages {get; set;}
O mapeamento é, por exemplo,
<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>
O truque está no filtro . Esta é uma versão dinâmica do onde atributo de mapeamento (18.1. filtros NHibernate)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Então, podemos ativar o filtro, para todas as operações da sessão atual. Apenas uma vez por solicitação (se for web app), dentro de algum AOP, onde sabemos o id do idioma:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
E finalmente, sabemos que a coleção Languages contém apenas um registro e sempre podemos acessar
.First()
. Chega de resultados múltiplos com mais idiomas Veja também:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310