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

NHibernate QueryOver - samling med for mange resultater

Jeg er bange for, at hans ikke vil virke. Efter design og arten af ​​ . Som angivet i dokumentationen:

Sådan (jeg gør) løse dette problem er lidt anderledes. Jeg har et objekt Language , Optionen har en samling af sprog

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

Kortlægningen er for eksempel

<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>

Tricket er i filteret . Dette er en dynamisk version af hvor mapping-attribute (18.1. NHibernate-filtre)

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

Derefter kan vi slå filteret til for alle operationer i den aktuelle session. Kun én gang pr. anmodning (hvis webapp), inde i en AOP, hvor vi kender sprog-id'et:

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

Og endelig ved vi, at samlingen Languages ​​kun indeholder én post, og vi kan altid få adgang til .First() . Ikke flere resultater med flere sprog

Se også:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310




  1. Hvordan filtrerer man en PostgreSQL-arraykolonne med JPA Criteria API?

  2. Flet rækker postgres og erstat værdier med seneste, når de ikke er null

  3. Sådan tilføjes søge- og filterkriterier i Yii

  4. Er der en måde at definere en navngivet konstant i en PostgreSQL-forespørgsel?