Что такое сессия в Hibernate
1️⃣ Как кратко ответить
Сессия в Hibernate — это интерфейс, представляющий собой краткосрочный объект, который используется для взаимодействия с базой данных. Она обеспечивает методы для выполнения операций CRUD (создание, чтение, обновление, удаление) и управления транзакциями. Сессия является не потокобезопасной и должна быть открыта и закрыта в рамках одного потока.
2️⃣ Подробное объяснение темы
В Hibernate, сессия (Session) — это основной интерфейс, который используется для взаимодействия с базой данных. Она представляет собой краткосрочный объект, который управляет жизненным циклом объектов, связанным с базой данных, и обеспечивает методы для выполнения операций CRUD.
Зачем нужна сессия?
Сессия необходима для управления транзакциями и выполнения операций с базой данных. Она позволяет:
- Создавать, читать, обновлять и удалять объекты в базе данных.
- Управлять транзакциями, обеспечивая атомарность операций.
- Кэшировать объекты для повышения производительности.
- Обеспечивать связь между объектами и их представлением в базе данных.
Как работает сессия?
Сессия создается из SessionFactory, которая является фабрикой для создания объектов сессий. SessionFactory создается один раз и используется для создания множества сессий. Сессия, в свою очередь, является краткосрочным объектом, который должен быть открыт и закрыт в рамках одного потока.
Пример использования сессии
// Создание объекта SessionFactory, который является фабрикой для создания сессий
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
// Открытие новой сессии из SessionFactory
Session session = sessionFactory.openSession();
// Начало транзакции
Transaction transaction = session.beginTransaction();
// Создание нового объекта, который будет сохранен в базе данных
MyEntity entity = new MyEntity();
entity.setName("Example");
// Сохранение объекта в базе данных
session.save(entity);
// Завершение транзакции, что приводит к фиксации изменений в базе данных
transaction.commit();
// Закрытие сессии, освобождение ресурсов
session.close();
Пояснение кода:
-
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Создается объектSessionFactory, который конфигурируется с помощью файла конфигурации Hibernate. Этот объект используется для создания сессий. -
Session session = sessionFactory.openSession();
Открывается новая сессия. Сессия — это краткосрочный объект, который используется для выполнения операций с базой данных. -
Transaction transaction = session.beginTransaction();
Начинается новая транзакция. Транзакция обеспечивает атомарность операций, что означает, что все операции внутри транзакции будут выполнены как единое целое. -
MyEntity entity = new MyEntity();
Создается новый объект, который будет сохранен в базе данных. -
session.save(entity);
Объект сохраняется в базе данных. Hibernate автоматически генерирует SQL-запрос для вставки данных. -
transaction.commit();
Транзакция завершается, и все изменения фиксируются в базе данных. -
session.close();
Сессия закрывается, освобождая все связанные с ней ресурсы.
Важные моменты
- Сессия не потокобезопасна. Она должна использоваться в рамках одного потока.
- Сессия должна быть закрыта после использования, чтобы избежать утечек ресурсов.
- Сессия обеспечивает первый уровень кэширования, что позволяет избежать повторных обращений к базе данных для одних и тех же объектов в рамках одной сессии.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться