Гибернация - сеансы
Сеанс используется для получения физического соединения с базой данных. Объект Session является легковесным и предназначен для создания экземпляра каждый раз, когда требуется взаимодействие с базой данных. Постоянные объекты сохраняются и извлекаются через объект Session.
Объекты сеанса не должны оставаться открытыми в течение длительного времени, потому что они обычно не являются потокобезопасными, и их следует создавать и уничтожать по мере необходимости. Основная функция сеанса - предлагать, создавать, читать и удалять операции для экземпляров сопоставленных классов сущностей.
Экземпляры могут существовать в одном из следующих трех состояний в данный момент времени:
transient - Новый экземпляр постоянного класса, который не связан с сеансом и не имеет представления в базе данных, и никакое значение идентификатора не считается временным в Hibernate.
persistent- Вы можете сделать временный экземпляр постоянным, связав его с сеансом. Постоянный экземпляр имеет представление в базе данных, значение идентификатора и связан с сеансом.
detached - Как только мы закроем сеанс Hibernate, постоянный экземпляр станет отдельным экземпляром.
Экземпляр Session является сериализуемым, если его постоянные классы сериализуемы. Типичная транзакция должна использовать следующую идиому -
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
Если сеанс вызывает исключение, транзакция должна быть отменена, а сеанс должен быть отменен.
Методы интерфейса сеанса
Есть несколько методов, предоставляемых Sessionинтерфейс, но я собираюсь перечислить только несколько важных методов, которые мы будем использовать в этом руководстве. Вы можете проверить документацию Hibernate для получения полного списка методов, связанных сSession и SessionFactory.
Sr. No. | Методы и описание сеанса |
---|---|
1 |
Transaction beginTransaction() Начните единицу работы и верните связанный объект транзакции. |
2 |
void cancelQuery() Отменить выполнение текущего запроса. |
3 |
void clear() Полностью очистить сеанс. |
4 |
Connection close() Завершите сеанс, освободив соединение JDBC и очистив его. |
5 |
Criteria createCriteria(Class persistentClass) Создайте новый экземпляр Criteria для данного класса сущности или суперкласса класса сущности. |
6 |
Criteria createCriteria(String entityName) Создайте новый экземпляр Criteria для данного имени объекта. |
7 |
Serializable getIdentifier(Object object) Вернуть значение идентификатора данной сущности, связанной с этим сеансом. |
8 |
Query createFilter(Object collection, String queryString) Создайте новый экземпляр Query для данной коллекции и строки фильтра. |
9 |
Query createQuery(String queryString) Создайте новый экземпляр Query для данной строки запроса HQL. |
10 |
SQLQuery createSQLQuery(String queryString) Создайте новый экземпляр SQLQuery для данной строки запроса SQL. |
11 |
void delete(Object object) Удалите постоянный экземпляр из хранилища данных. |
12 |
void delete(String entityName, Object object) Удалите постоянный экземпляр из хранилища данных. |
13 |
Session get(String entityName, Serializable id) Вернуть постоянный экземпляр данной именованной сущности с данным идентификатором или null, если такого постоянного экземпляра нет. |
14 |
SessionFactory getSessionFactory() Получите фабрику сеансов, создавшую этот сеанс. |
15 |
void refresh(Object object) Перечитайте состояние данного экземпляра из базовой базы данных. |
16 |
Transaction getTransaction() Получите экземпляр транзакции, связанный с этим сеансом. |
17 |
boolean isConnected() Убедитесь, что сеанс в настоящее время подключен. |
18 |
boolean isDirty() Содержит ли этот сеанс какие-либо изменения, которые необходимо синхронизировать с базой данных? |
19 |
boolean isOpen() Проверьте, открыт ли еще сеанс. |
20 |
Serializable save(Object object) Сохраните данный временный экземпляр, сначала назначив сгенерированный идентификатор. |
21 год |
void saveOrUpdate(Object object) Либо сохраните (Объект), либо обновите (Объект) данный экземпляр. |
22 |
void update(Object object) Обновите постоянный экземпляр идентификатором данного отсоединенного экземпляра. |
23 |
void update(String entityName, Object object) Обновите постоянный экземпляр идентификатором данного отсоединенного экземпляра. |