J'ai peur que ça ne marche pas. De par la conception et la nature du <join>
. Comme indiqué dans la documentation :
La façon dont (je fais) résoudre ce problème est un peu différent. J'ai un objet Language
, l'Option a collection de langues
public virtual IList<Language> Languages {get; set;}
Le mapping est par exemple <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>
L'astuce est dans le filtre . Il s'agit d'une version dynamique de où mapping-attribute (18.1. Filtres NHibernate)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Ensuite, nous pouvons activer le filtre, pour toutes les opérations de la session en cours. Une seule fois par requête (si application Web), dans certains AOP, dont nous connaissons l'identifiant de langue :
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
Et enfin, nous savons que la collection Languages ne contient qu'un seul enregistrement et nous pouvons toujours accéder à .First()
. Plus de résultats multiples avec plus de langues
Voir aussi :https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310