Все дочерние или только один дочерний загружается, когда указываете ленивую загрузку в JPA? - PullRequest
0 голосов
/ 18 января 2011

Я не могу найти поведение отложенной загрузки. Если у меня есть отношение «один ко многим» в JPA, помеченное как отложенная загрузка, когда в моем коде я вызываю метод «getChildren ()» из parent, что происходит ?:

a) EclipseLink загружает всех дочерних элементов этого родителя
b) EclipseLink загружает одного дочернего элемента во время этого родителя

Если ответ «a», это означает, что для большихнаборы данных, такие как тысячи или миллионы записей. Я не должен использовать модель «один ко многим» и реализовывать собственную модель разбиения на страницы на стороне сервера?

спасибо.

Ответы [ 2 ]

1 голос
/ 18 января 2011

A) - при доступе к OneToMany будут загружены все дочерние элементы.

Если ваша OneToMany слишком велика для загрузки, не отображайте ее. Запросите это вместо этого. Вы можете установить firstResult / maxResults для запроса.

@BatchSize не поможет в OneToMany.

0 голосов
/ 18 января 2011

В самом JPA сейчас есть возможность указать размер партии.Так что на самом деле ответ на ваш вопрос (с), это зависит от реализации, чтобы определить, что это для вашей коллекции OneToMany.Скорее всего, это будет число больше единицы, но оно не указано.

Если вы используете Hibernate, есть возможность использовать аннотацию @ BatchSize , чтобы указать, сколько загружать.

Если вы делаете нумерацию страниц, один извопросы, с которыми вам нужно разобраться, являются отправной точкой вашей коллекции.Таким образом, если вы отображаете 50 элементов на странице, а ваш пользователь находится на странице 13 из 50, вы хотите отобразить элементы 601 - 650 из своей коллекции.Даже с ленивой загрузкой JPA вы не сможете найти нужную вам позицию в коллекции.Таким образом, вы, вероятно, захотите свою собственную схему разбиения на страницы, используя Query с указанной начальной позицией и максимальными результатами.

...