Sobes.tech
Junior — Middle

Come viene implementata l'inizializzazione ritardata delle collezioni in Hibernate?

sobes.tech AI

Risposta dell'AI

In Hibernate, l'inizializzazione ritardata (lazy loading) delle collezioni viene implementata tramite oggetti proxy e wrapper speciali per le collezioni. Quando si carica un'entità con una collezione, Hibernate non carica immediatamente tutti gli elementi della collezione, ma crea invece una collezione proxy che contiene un riferimento alla sessione e alle informazioni sulla query.

Quando la collezione viene usata per la prima volta (ad esempio, chiamando il metodo size() o effettuando un'iterazione), Hibernate esegue automaticamente una query al database per caricare i dati reali. Questo permette di risparmiare risorse e ridurre i tempi di caricamento, specialmente quando si lavora con grandi volumi di dati.

Esempio:

@Entity
public class Author {
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
    private Set<Book> books;

    // getters e setters
}

Qui, la collezione books verrà caricata solo al primo accesso, non al caricamento dell'oggetto Author.