Mysql
 sql >> Database >  >> RDS >> Mysql

NHibernate QueryOver - raccolta con troppi risultati

Temo che il suo non funzionerà. In base alla progettazione e alla natura del <join> . Come indicato nella documentazione:

Il modo in cui (lo faccio) risolvere questo problema è un po' diverso. Ho un oggetto Language , l'Opzione ha una raccolta di lingue

public virtual IList<Language> Languages {get; set;}

La mappatura è ad esempio <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>

Il trucco è nel filtro . Questa è una versione dinamica di dove mapping-attribute (18.1. Filtri NHibernate)

<filter-def name="LanguageFilter" >
  <filter-param name="languageId" type="Int32" />
</filter-def>

Quindi, possiamo attivare il filtro, per tutte le operazioni della sessione corrente. Solo una volta per richiesta (se app web), all'interno di alcuni AOP, di cui conosciamo l'id della lingua:

var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);

E infine, sappiamo che la raccolta Languages ​​contiene un solo record e possiamo sempre accedere a .First() . Niente più risultati multipli con più lingue

Vedi anche:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310