Junior — Middle
Jak w Hibernate realizowana jest opóźniona inicjalizacja kolekcji?
sobes.tech AI
Odpowiedź od AI
W Hibernate, opóźniona inicjalizacja (lazy loading) kolekcji jest realizowana za pomocą obiektów proxy i specjalnych opakowań kolekcji. Przy ładowaniu encji z kolekcją, Hibernate nie ładuje od razu wszystkich elementów kolekcji, lecz tworzy kolekcję proxy zawierającą odwołanie do sesji i informacje o zapytaniu.
Gdy kolekcja jest używana po raz pierwszy (np. wywołując metodę size() lub wykonując iterację), Hibernate automatycznie wykonuje zapytanie do bazy danych, ładując rzeczywiste dane. Pozwala to oszczędzić zasoby i skrócić czas ładowania, szczególnie przy pracy z dużymi ilościami danych.
Przykład:
@Entity
public class Author {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
private Set<Book> books;
// gettery i settery
}
Tutaj kolekcja books zostanie załadowana tylko przy pierwszym odwołaniu, a nie podczas ładowania obiektu Author.