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 № 1Tak.
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. .