2013-03-19 5 views
2

Я пытаюсь изучить Hibernate, я прошел через hibernate lazy initialization. У меня есть несколько пояснений относительно lazy initialization.ленивая инициализация в спящем режиме

Прежде всего, что называется так называемая ленивая инициализация, что она делает? Во-вторых, когда я должен пойти на это? Затем я обнаружил, что в блогах говорится, что использование этого улучшает производительность, и мне просто нужно знать, как это сделать. Тогда есть ли какие-либо недостатки в его использовании? Может ли кто-нибудь помочь мне понять это? lazy initialization?

ответ

6

Ленивый выбор (или инициализация) является противоположностью eager выборки. Ленивая выборка, по умолчанию в спящем режиме, означает, что когда запись загружается из базы данных, дочерние строки отношения «один ко многим» не загружаются. Например.

@Entity 
@Table(name = "COMPANY") 
public class Company { 
... 
@OneToMany(fetch = FetchType.LAZY) 
private Set<Employee> employees = new HashSet<Employee>(); 

Заявление о регистрации компании не будет возвращено (задано) Сотрудникам, которые должны будут быть запрошены в другом запросе.

Преимущества

  • производительности. Сотрудники загружаются только при необходимости (и запрашиваются). Воспользуйтесь преимуществами CPU, памяти, пропускной способности ... (как на стороне Java, так и на стороне SQL-сервера).

Недостатки

  • , когда необходимы также сотрудники, отделенный запрос должен быть выполнены.

Обратите внимание, что запрос на сотрудников должна быть выполнена в течение одного сеанса (или известный LazyInitializationException будет нежелательным).

This page содержит интересную информацию.

3

Ленивая инициализация означает ленивую загрузку.

В очень немногих слова-

инициализации объекта, когда сначала нужно, он дает высокую производительность, не загруженную ненужные объекты.»

EG-предположим, необходимо иметь запись, в которой есть несколько таблиц. Если вы выберете ее сразу, это займет больше времени, чем если бы вы выбрали только основную таблицу. Использование ленивой загрузки остальная часть информации будет извлекаться только в случае необходимости. Таким образом, в определенных сценариях это efficient-loading.

2

Lazy setting определяет, следует ли загружать дочерние объекты при загрузке родительского объекта. Вам нужно сделать этот параметр соответствующим файлом сопоставления гибернации родительского класса. Lazy = true (означает не загружать ребенка) По умолчанию ленивая загрузка дочерних объектов истинна. Это гарантирует, что дочерние объекты не загружаются, если они явно не вызваны в приложении, вызвав метод getChild() для родителя. В этом случае hibernate выдает новый вызов базы данных для загрузки дочернего элемента, когда getChild() фактически вызывается в родительском объекте. Но в некоторых случаях вам нужно загрузить дочерние объекты, когда родитель загружен.Просто сделайте lazy=false, а спящий режим будет загружать дочерний элемент, когда родитель загружается из базы данных. Примеры lazy=true (по умолчанию). Адрес дочернего класса User может быть ленивым, если это не требуется часто. lazy=false Но вам может потребоваться загрузить объект Author для родителя книги всякий раз, когда вы имеете дело с книгой для книжного магазина в Интернете.

Смежные вопросы