Mysql
 sql >> Datenbank >  >> RDS >> Mysql

NHibernate QueryOver - Sammlung mit zu vielen Ergebnissen

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