FetchType и загрузка данных
Связанным данным не всегда нужно загружаться одновременно
Когда JPA получает Entity, у неё могут быть связанные объекты и коллекции. Загружать весь граф сразу дорого, но откладывать всё без исключения тоже неудобно. Для этого в отображении связей используется стратегия загрузки.
EAGER и LAZY выражают разные намерения
@ManyToOne(fetch = FetchType.LAZY)
private User user;
EAGER требует, чтобы связанное состояние было доступно как часть загрузки Entity.
LAZY означает, что загрузку можно отложить до момента, когда связь действительно понадобится.
При этом конкретное количество SQL-запросов определяется provider и самим запросом, а не только одной аннотацией.
Загрузка — часть проектирования запроса
Если экрану нужны заказы вместе с пользователями, эти данные стоит получать осознанно. Если пользователи вообще не используются, их загрузка только увеличит объём работы. Поэтому FetchType — не переключатель «быстро/медленно», а часть решения о том, какие данные нужны конкретному сценарию.