/ / jaka jest różnica między lazy = „true” a fetch = „select” w hibernacji? - hibernacja, leniwa ocena

jaka jest różnica między leniwym = "true" i fetch = "select" w hibernacji? - hibernacja, leniwość

The lazy=true atrybut umożliwia leniwe ładowanie kolekcji nadrzędnych i podrzędnych oraz tego samego fetch="select" atrybut. Czy jest jakaś różnica między lazy="true" i fetch="select" w hibernacji ?.

Odpowiedzi:

21 dla odpowiedzi № 1

Tak.

The lazy atrybut mówi hibernacji gdy zdobyć dzieci.

The fetch atrybut mówi hibernacji w jaki sposób zdobyć dzieci.

Kiedy powiesz

Atrybut lazy = true umożliwia leniwe ładowanie rodzica i dziecka kolekcje i to samo, co atrybut fetch = „select”

że jest płaska się błędne. Select sprowadzić strategia nie jest to samo, jak toczenie leniwy załadunku off. W rzeczywistości, z dokumentacji

Wybierz pobieranie: drugi SELECT służy do pobierania skojarzonego podmiot lub zbiór. Chyba że wyraźnie wyłączysz leniwe pobieranie przez określając lazy = "false", to drugie wybranie zostanie wykonane tylko, gdy masz dostęp do stowarzyszenia.


13 dla odpowiedzi nr 2

Kiedy mówimy fetch="select", wtedy zawsze odpali oddzielne zapytania, aby pobrać obiekty asocjacji, nawet jeśli tak jest lazy ="false".

Ale kiedy mówimy lazy ="true"oznacza to, że pobierze obiekty asocjacji w oddzielnym zapytaniu, ale nie w momencie ładowania obiektu, ale po pierwszym uzyskaniu dostępu. Możemy to zrobić, mówiąc list().size().

Kiedy mówimy fetch="join" zawsze wywoła pojedyncze zapytanie, aby uzyskać obiekty skojarzenia z bazy danych.


1 dla odpowiedzi nr 3

Aby rozwiązać n + 1 wybierz problem dla n zapytań(rodzicielska relacja podrzędna) w hibernacji używamy fetch = „join” zamiast fetch = „select”. Ustawienie Lazy decyduje o tym, czy ładować obiekty potomne podczas ładowania obiektu nadrzędnego. Należy to zrobić, ustawiając odpowiedni plik odwzorowania hibernacji klasy nadrzędnej. .