Ленивая загрузка в основном требуется, если у вас есть хорошо разработанная схема и объекты, которые широко сопоставляются с другими объектами в приложении. Вот очень простой пример:
Персона сущность сопоставляет один ко многим Рефералы
Рефералы один на один Лицо дважды (Реферер и Рефери)
Достаточно просто, верно? Что ж, если вы используете готовую загрузку в этих двух отношениях, вы можете получить массу последующих запросов данных, которые вы, вероятно, не будете отображать в большинстве случаев.
Например:
Ваше приложение хочет загрузить запись " PersonA ", и у этого PersonA есть 3 записи рефералов, поскольку он ссылался на 3 клиентов: PersonB , PersonC и PersonD .
Так что, если у вас есть Eager, выбирающий эти отношения, JPA загрузит эти записи 3 человек. И скажем, PersonC привлек 10 клиентов, потому что он любит все, что вы продаете. Теперь JPA также должна загрузить этих 10 клиентов, опять же из-за энергичной загрузки.
Вы можете видеть, куда это идет. Если бы это были отношения с отложенной загрузкой, единственный раз, когда этот дополнительный набор данных был бы загружен, это когда вы непосредственно выполняете вызов getReferrals () для него.
Лично я бы не стал создавать дополнительные методы для этих выборок. Это большая дополнительная работа по написанию кода, и теперь вам нужно каким-то образом управлять состоянием сущностей и выполнять или нет дополнительную загрузку.
JPA облегчает эту задачу, если вы используете отложенную загрузку. Просто выполните любой вызов get ... (), который вы обычно делаете для объекта POJO, а JPA сделает все остальное.