📌 Проблема:
Когда загружаем большую коллекцию через
@OneToMany, Hibernate часто делает это лениво (LAZY), но при первом доступе — забирает всю коллекцию целиком. Это может привести к OutOfMemoryError или резкому проседанию производительности.
📌 Решение: использовать пагинацию (
batch-size) или запрос коллекции порциями.Как настроить
batch-size на уровне сущности:
@Entity
public class User {
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@BatchSize(size = 50)
private List<Order> orders;
}
🧠 Теперь Hibernate будет загружать за раз по 50 элементов, а не всю коллекцию сразу!
📌 Или можно настроить глобально через
application.properties:
spring.jpa.properties.hibernate.default_batch_fetch_size=50
⚠️ Важно:
-
@BatchSize работает только для LAZY-связей.- Это не пагинация в SQL, а оптимизация внутренних запросов Hibernate.
- Если коллекция огромная (100k+ записей) — лучше делать явные
paged запросы в репозитории.💡Помните: без настройки
batch-size Hibernate может сломать приложение под нагрузкой. Оптимизируйте загрузку коллекций заранее!📲 Мы в MAX
👉@BookJava


