Вступить в клуб →
лёгкаявопросPostgreSQL, JPA и производительность запросов

Сколько запросов уйдёт в базу при обходе ленивой коллекции

У сущности Order есть коллекция позиций:

@OneToMany(mappedBy = "order", fetch = FetchType.LAZY)
private List<OrderItem> items;

В сервисе считают общее число позиций:

@Transactional(readOnly = true)
public int countItems() {
    List<Order> orders = orderRepository.findAll(); // вернулось 500 заказов
    int total = 0;
    for (Order o : orders) {
        total += o.getItems().size();
    }
    return total;
}

Сколько SQL-запросов увидит база при одном вызове метода?

  • 1 — Hibernate загрузил позиции сразу вместе с заказами
  • 2 — Hibernate объединяет обращения к коллекциям в один дополнительный запрос
  • 501 — один на список заказов и по одному на позиции каждого заказа
  • 500 — findAll не идёт в базу, потому что читает из кэша первого уровня

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела