Πώς υλοποιείται η καθυστερημένη αρχικοποίηση των συλλογών στο Hibernate;
sobes.tech AI
Απάντηση από AI
Στο Hibernate, η καθυστερημένη φόρτωση (lazy loading) των συλλογών υλοποιείται μέσω proxy αντικειμένων και ειδικών περιτυλίξεων συλλογών. Όταν φορτώνεται μια οντότητα με μια συλλογή, το Hibernate δεν φορτώνει αμέσως όλα τα στοιχεία της συλλογής, αλλά δημιουργεί μια proxy συλλογή που περιέχει μια αναφορά στη συνεδρία και πληροφορίες σχετικά με το ερώτημα.
Όταν η συλλογή χρησιμοποιείται για πρώτη φορά (π.χ., καλώντας τη μέθοδο size() ή πραγματοποιώντας επανάληψη), το Hibernate εκτελεί αυτόματα ένα ερώτημα στη βάση δεδομένων για να φορτώσει τα πραγματικά δεδομένα. Αυτό βοηθά στην εξοικονόμηση πόρων και στη μείωση του χρόνου φόρτωσης, ειδικά όταν εργάζεστε με μεγάλα όγκο δεδομένων.
Παράδειγμα:
@Entity
public class Author {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
private Set<Book> books;
// getters και setters
}
Εδώ, η συλλογή books θα φορτωθεί μόνο κατά την πρώτη πρόσβαση, και όχι κατά τη φόρτωση του αντικειμένου Author.