2011-07-26 13 views
5

Podczas pracy z Fluent nHibernate zauważam, że w relacjach mogę określić właściwość Fetch, z możliwymi opcjami Select(), Join() i Subselect().Co to jest .Fetch.Select() w płynnym nHibernate?

Zrobiłem kilka wyszukiwania dla tych i wydał bardzo mało informacji. Znalazłem je w dokumentacji nHibernate i płynnej dokumentacji nHibernate, ale robi niewiele poza ich sygnaturami, co nie pomaga mi zbytnio.

Zastanawiam się, czy istnieje prawdziwe wyjaśnienie tego, co to jest i co tak naprawdę robią. Sam byłem trochę zakłopotany. Z mojej własnej oceny wynika, że ​​zmieniają sposób, w jaki przywołane obiekty są wciągane do wykresu obiektu, ale muszę jeszcze całkowicie rozróżnić, czy to zmieniają, i który z nich jest optymalny dla jakiej sytuacji ...

Znalazłem ten wpis na blogu (http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/), który ma trochę szczegółów, ale wciąż jestem zakłopotany całą sytuacją. Widziałem również inne przykłady, które stwierdzają, że używanie stanu Select() jest bardziej optymalne, ale rozumowanie za tym. Dodatkowo znalazłem wpis na (http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies), który jest nastawiony na oryginalną platformę Java Hibernate, ale zakładam, że koncepcja jest taka sama. W tym przypadku moja teoria wydaje się nieco podupadać, ponieważ koncentruje się bardziej na leniwym aspekcie ładowania, ale wciąż nie widziałem żadnych naprawdę płaskich przykładów.

Odpowiedz

3

Nie jestem zaznajomiony z nHibernate (pracuję z Hibernate i Java), ale na podstawie analogii, to pozwala ci określić właściwość asocjacji/kolekcji, którą chcesz załadować z niecierpliwością, z podanym bytem. Jest to przydatne, gdy nie masz pełnej kontroli nad (n) sesjami hibernacji (np. Jeśli inne sesje, takie jak Spring in Java, zajmują się sesjami/transakcjami). Twoje założenie jest w zasadzie poprawne. Wybierz, dołącz i podselekcja są sposobami uzyskania powiązanej właściwości i określenia, jakiego rodzaju zapytanie będzie wykonywane w bazie danych. Który z nich jest optymalny, tak naprawdę zależy od twojej sytuacji.

Mam nadzieję, że to trochę pomaga,
Pozdrawiam.

18
  • Dołącz pobierania - NHibernate pobiera związanego wystąpienie lub gromadzenie w tym samym SELECT pomocą zewnętrznej Dołącz.

  • Wybierz pobieranie - drugi SELECT służy do pobierania powiązanej encji lub kolekcji. O ile nie wyłączysz jawnie leniwego pobierania, podając leniwy = "fałsz", to drugie wybieranie zostanie wykonane dopiero po uzyskaniu dostępu do powiązania.

  • Subselect fetching - drugi SELECT służy do pobierania powiązanych kolekcji dla wszystkich elementów pobranych w poprzednim zapytaniu lub pobraniu. O ile nie wyłączysz jawnie leniwego pobierania, podając leniwy = "fałsz", to drugie wybieranie zostanie wykonane dopiero po uzyskaniu dostępu do powiązania.

Zapoznaj się z dokumentem strategicznym Pobieranie @ The Nhibernate Documentation