Как се реализира забавената инициализация на колекциите в Hibernate?
sobes.tech AI
Отговор от AI
В Hibernate забавеното зареждане (lazy loading) на колекции се реализира чрез прокси обекти и специални обвивки на колекциите. При зареждане на същност с колекция, Hibernate не зарежда веднага всички елементи на колекцията, а вместо това създава прокси колекция, която съдържа препратка към сесията и информация за заявката.
Когато колекцията бъде използвана за първи път (например, извикване на метода size() или итерация), Hibernate автоматично изпълнява заявка към базата данни, зареждайки реалните данни. Това помага за спестяване на ресурси и намаляване на времето за зареждане, особено при работа с големи обеми данни.
Пример:
@Entity
public class Author {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
private Set<Book> books;
// гетъри и сетъри
}
Тук колекцията books ще бъде заредена само при първия ѝ достъп, а не при зареждане на обекта Author.