81просмотров
32.8%от подписчиков
16 сентября 2024 г.
Score: 89
Proxy - представляет собой паттерн проектирования (заместитель), в котором создаётся подставной объект, который замещает реальный объект. В результате клиентский код, вызывающий данный объект, обращается уже к Proxy-объекту. Тот выполняет свою функцию, а затем уже обращается к исходному объекту. Proxy в Hibernate используется для замены реальной сущности и её отложенной загрузки (lazy loading). С его помощью можно отложить фактическую загрузку данных из базы данных до того момента, когда эти данные понадобятся. Этот механизм необходим для оптимизации производительности, особенно в случаях, когда мы работаем с большими объёмами данных.
Пример: @Entity
public class Author { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "author", fetch = FetchType.LAZY) private List<Book> books = new ArrayList<>();
} @Entity
public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne @JoinColumn(name = "author_id") private Author author;
}
В данном примере у класса Author есть список книг, помеченный fetch = FetchType.LAZY. Это означает, что для данных книг будет использоваться прокси. То есть они загрузятся только тогда, когда мы непосредственно захотим обратиться к этому списку (лениво).
⚠ Важным моментом является то, что для доступа к lazy объектам потребуется открытая сессия, в противном случае будет вызвано LazyInitializationException (об этом рассказывалось ранее на канале).