sql >> Database >  >> RDS >> Mysql

NHibernate QueryOver - verzameling met te veel resultaten

Ik ben bang dat hij niet zal werken. Door het ontwerp en de aard van de <join> . Zoals vermeld in de documentatie:

De manier om (ik doe) dit probleem oplossen is een beetje anders. Ik heb een object Language , de optie heeft een verzameling talen

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

De toewijzing is bijvoorbeeld <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>

De truc zit in het filter . Dit is een dynamische versie van de waar mapping-attribuut (18.1. NHibernate-filters)

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

Vervolgens kunnen we het filter inschakelen voor alle bewerkingen van de huidige sessie. Slechts één keer per verzoek (indien web-app), binnen een AOP, waar we de taal-ID kennen:

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

En tot slot weten we dat de verzameling Talen slechts één record bevat en dat we altijd toegang hebben tot .First() . Geen meerdere resultaten meer met meer talen

Zie ook:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310




  1. MySql UNION voor UPDATE

  2. Vreemd castinggedrag in mysql

  3. PostgreSQL - kon geen gelijkheidsoperator identificeren voor type json

  4. Hoe maak ik verbinding met een MySQL-database van Clojure?