Ich befürchte, dass seine nicht funktionieren wird. Durch das Design und die Art des <join>
. Wie in der Dokumentation angegeben:
Die Art und Weise, wie man (ich tue) Lösung dieses Problems ist ein bisschen anders. Ich habe ein Objekt Language
, die Option hat eine Sammlung von Sprachen
public virtual IList<Language> Languages {get; set;}
Die Zuordnung ist beispielsweise <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>
Der Trick liegt im Filter . Dies ist eine dynamische Version von where Zuordnungsattribut (18.1. NHibernate-Filter)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Dann können wir den Filter für alle Vorgänge der aktuellen Sitzung aktivieren. Nur einmal pro Anfrage (bei Web-App) innerhalb eines AOP, wo wir die Sprach-ID kennen:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
Und schließlich wissen wir, dass die Collection Languages nur einen Datensatz enthält und wir immer auf .First()
zugreifen können . Keine mehrfachen Ergebnisse mehr mit mehr Sprachen
Siehe auch:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310