Obawiam się, że jego nie zadziała. Zgodnie z projektem i charakterem <join>
. Jak podano w dokumentacji:
Sposób (robię) rozwiązać ten problem jest nieco inny. Mam obiekt Language
, Opcja posiada kolekcję języków
public virtual IList<Language> Languages {get; set;}
Mapowanie to na przykład <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>
Sztuczka tkwi w filtrze . To jest dynamiczna wersja gdzie atrybut mapowania (18.1. Filtry NHibernate)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Następnie możemy włączyć filtr dla wszystkich operacji w bieżącej sesji. Tylko raz na żądanie (jeśli aplikacja internetowa), w niektórych AOP, gdzie znamy identyfikator języka:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
I wreszcie wiemy, że kolekcja Languages zawiera tylko jeden rekord i zawsze możemy uzyskać dostęp do .First()
. Koniec z wieloma wynikami w większej liczbie języków
Zobacz też:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310