Продвинутый Hibernate: решение вызовов уровня Enterprise

11 участников

О чём курс

О чём курс

Михаил Поливаха разбирает производительность Hibernate, ограничения ORM и архитектурные задачи приложений с большой нагрузкой. Вы рассмотрите, как уменьшать число запросов, выбирать способ загрузки связей и обходить ситуации, в которых Fetch Join приводит к лишней выборке или ошибке MultipleBagFetchException. В курсе также сопоставляются Page, Slice и List, разбираются подсчёт строк и способы пагинации для больших наборов данных.

В блоке оптимизации показаны @BatchSize, StatelessSession, работа с Clob/Blob и ленивой загрузкой. Для длинных списков рассматривается Keyset, или Seek-based, пагинация и случаи, когда её применение не оправдано. Автор отдельно разбирает пакетные операции без затрат на Dirty Checking и кэш первого уровня. Заявленное ускорение таких операций в десять и более раз — оценка автора.

Архитектура и данные

На примерах enterprise-задач вы изучите Soft Delete в Hibernate 6, работу с крупными коллекциями и хранение иерархий. Для деревьев сопоставляются Adjacency List и Materialized Path, а также рассматриваются Recursive CTE и их отображение в JPA. Тема многопользовательской архитектуры охватывает @TenantId, разделяемую и отдельные схемы либо базы данных, TenantResolver и безопасность сессии.

Transactional Outbox разбирается как способ связать изменения в базе с отправкой сообщений в Kafka или RabbitMQ. В программе названы очередь в базе и polling publisher. Эти решения рассматриваются вместе с вопросами надёжности и масштабирования.

Кому подойдёт

Курс адресован Java- и Spring-разработчикам, которые работают с Hibernate и хотят понять поведение слоя доступа к данным. Техлиды и архитекторы найдут темы о сложных предметных областях, производительности и устройстве надёжных систем. Михаил Поливаха — Senior Software Engineer и контрибьютор Spring Data; он выступал на конференциях JPoint, Joker, Spring I/O Barcelona и Devoxx Belgium.

Программа обучения

Блок 1. Стратегии оптимизации: от базы к продвинутому тюнингу Цель: производительность «в моменте», применимо завтра

  • findById vs getReferenceById (Proxy)
  • Минимизируем количество Select при сохранении связей на ровном месте
  • Page vs Slice vs List
  • Разбор ситуаций, когда count(*) становится непозволительной роскошью
  • @BatchSize
  • Лечение N+1 в ситуациях, когда Join Fetch либо невозможен, либо от него больше вреда, чем пользы
  • StatelessSession
  • Bulk-задачи в обход Persistence Context, без dirty checking и L1 cache
  • Pagination evolution
  • Почему Offset убивает БД. Реализация Keyset (Seek-based) pagination. Разбор кейсов, когда Keyset pagination не стоит свеч
  • Heavy columns
  • Clob/Blob, @DynamicUpdate и bytecode enhancement для ленивой загрузки

Блок 2. Преодоление ограничений ORM: маппинг и выборки Цель: framework для типичных вызовов ORM/Hibernate

  • Pageable + Fetch Join
  • Мина замедленного действия (in-memory pagination), двухэтапная выборка и DTO-проекции
  • MultipleBagFetchException
  • Почему нельзя fetch нескольких коллекций, List → Set: плюсы и скрытые риски и альтернативы

Блок 3. Enterprise-кейсы: архитектура, надежность и big data Цель: разбор реальных enterprise проблем и решений

  • Soft Delete
  • Как выглядит правильная и производительная реализация Soft Delete в современных версиях Hibernate. Скрытые риски @SoftDelete
  • Gigantic Collections
  • Как жить, когда в @OneToMany могут быть сотни или даже тысячи элементов: почему обычные коллекции тут антипаттерн
  • Transactional Outbox
  • Доставка в Kafka/RabbitMQ без XA, polling publisher и очередь в БД
  • Хранение Иерархии в БД
  • Проверенные временем алгоритмы хранения графов и древовидных структур в БД. Adjacency List vs Materialized Path, Recursive CTE имаппинг в JPA
  • Multi-tenancy в 2026
  • Безопасная multi-tenancy архитектура. @TenantId в Hibernate 6, стратегии shared/separate schema/db, TenantResolver и безопасность сессии
Складчина создана 2 апреля 2026 г. · описание обновлено 25 октября 2026 г.

Теги курса

3 233 ₽ 29 999 ₽