Sobes.tech
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.