Mysql
 sql >> Baza danych >  >> RDS >> Mysql

NHibernate QueryOver - kolekcja ze zbyt dużą liczbą wyników

Obawiam się, że jego nie zadziała. Zgodnie z projektem i charakterem <join> . Jak podano w dokumentacji:

Sposób (robię) rozwiązać ten problem jest nieco inny. Mam obiekt Language , Opcja posiada kolekcję języków

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

Mapowanie to na przykład <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>

Sztuczka tkwi w filtrze . To jest dynamiczna wersja gdzie atrybut mapowania (18.1. Filtry NHibernate)

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

Następnie możemy włączyć filtr dla wszystkich operacji w bieżącej sesji. Tylko raz na żądanie (jeśli aplikacja internetowa), w niektórych AOP, gdzie znamy identyfikator języka:

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

I wreszcie wiemy, że kolekcja Languages ​​zawiera tylko jeden rekord i zawsze możemy uzyskać dostęp do .First() . Koniec z wieloma wynikami w większej liczbie języków

Zobacz też:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie tablicy o nieznanej długości

  2. VARCHAR jako klucz obcy/klucz podstawowy w bazie danych dobry czy zły?

  3. Czy zmiana strefy czasowej MySQL zmieni wartości pól DateTime w bazie danych?

  4. Sprawdź, czy aktualna data jest między dwiema datami + mysql select query

  5. Jak edytować procedurę składowaną w MySQL?