Ответ
Центральным и тяжеловесным объектом, отвечающим за конфигурацию и создание сессий, является SessionFactory.
Роль SessionFactory:
- Фабрика сессий: Создает легковесные объекты
Sessionдля работы с БД. - Кэширование: Хранит вторичный кэш (если включен), метаданные маппинга (ORM-модель) и оптимизированные SQL-запросы.
- Конфигурация: Содержит настройки подключения из
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. Представь себе такой здоровенный, навороченный станок, который только и делает, что штампует рабочие инструменты.
Чем этот урод занимается, по сути:
- Фабрика сессий, ёпта: Его основная работа — плодить эти лёгкие объекты
Session, через которые ты и общаешься с базой. Как конвейер, только для сессий. - Хранитель всякой хуйни: В нём сидит, если включил, этот вторичный кэш (чтобы не ходить в базу по сто раз), вся карта маппинга (кто на какую таблицу мапится) и уже заготовленные, оптимизированные SQL-запросы. Короче, мозговой центр.
- Мешок с настройками: Всё, что ты навтыкал в
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, хитрая жопа, умеет и так, и эдак, так что не парься.