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

Ответ

Центральным и тяжеловесным объектом, отвечающим за конфигурацию и создание сессий, является 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 реализует оба варианта.

Ответ 18+ 🔞

А, слушай, вот эта штука — SessionFactory — это типа главный штаб, блядь, в твоём Hibernate. Представь себе такой здоровенный, навороченный станок, который только и делает, что штампует рабочие инструменты.

Чем этот урод занимается, по сути:

  1. Фабрика сессий, ёпта: Его основная работа — плодить эти лёгкие объекты Session, через которые ты и общаешься с базой. Как конвейер, только для сессий.
  2. Хранитель всякой хуйни: В нём сидит, если включил, этот вторичный кэш (чтобы не ходить в базу по сто раз), вся карта маппинга (кто на какую таблицу мапится) и уже заготовленные, оптимизированные SQL-запросы. Короче, мозговой центр.
  3. Мешок с настройками: Всё, что ты навтыкал в hibernate.cfg.xml или persistence.xml — оно тут и живёт. URL базы, логин-пароль, диалект — всё здесь, блядь.

Вот как это раньше, в старые добрые времена, собирали (способ уже древний, но суть ясна):

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 (стандарт, мать его), то вместо нашего родного SessionFactory будет выступать его казённый брат — EntityManagerFactory. По сути, это та же самая банка, но завернутая в стандартный интерфейс, чтобы все фреймворки понимали друг друга. Hibernate, хитрая жопа, умеет и так, и эдак, так что не парься.