Какой объект в Hibernate отвечает за создание сессий и управление подключением к БД?

«Какой объект в Hibernate отвечает за создание сессий и управление подключением к БД?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Центральным и тяжеловесным объектом, отвечающим за конфигурацию и создание сессий, является SessionFactory.

Роль SessionFactory:

  1. Фабрика сессий: Создает легковесные объекты Session для работы с БД.
  2. Кэширование: Хранит вторичный кэш (если включен), метаданные маппинга (ORM-модель) и оптимизированные SQL-запросы.
  3. Конфигурация: Содержит настройки подключения из hibernate.cfg.xml или persistence.xml.

Пример создания (устаревший, но наглядный API):

Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties())
        .build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

// Использование
Session session = sessionFactory.openSession();
// ... работа с сущностями через session
session.close();

В контексте JPA: В приложениях, использующих стандарт JPA, вместо SessionFactory используется EntityManagerFactory, который является оберткой над SessionFactory и предоставляет стандартизированный интерфейс. Hibernate реализует оба варианта.