Сколько запросов уйдёт в базу при обходе ленивой коллекции
У сущности 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 не идёт в базу, потому что читает из кэша первого уровня
