Выбор ответа Middle Hibernate: N+1, lazy, кеш обновлено

@BatchSize

Вопрос

Что делает hibernate.default_batch_fetch_size=50 при обходе 200 заказов с ленивыми коллекциями items?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Догружает коллекции пачками через IN: около 4 запросов. Batch fetching: при первом обращении к ленивой коллекции Hibernate загружает коллекции сразу для нескольких владельцев из контекста одним запросом where orderid in (?, ?, ...).

Варианты ответа

  1. Загружает только первые 50 позиций каждой коллекции
  2. Ограничивает размер страницы всех запросов до 50 строк
  3. Включает кеш второго уровня на 50 записей сущности
  4. Догружает коллекции пачками через IN: около 4 запросовправильный ответ

Разбор

Batch fetching: при первом обращении к ленивой коллекции Hibernate загружает коллекции сразу для нескольких владельцев из контекста одним запросом where order_id in (?, ?, ...). N+1 превращается в 1 + N/50. Коллекции не обрезаются, пагинация и L2-кеш тут ни при чём. Хорошая настройка по умолчанию, когда join fetch неудобен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.