Учебники

Hibernate — Сессии

Сессия используется для получения физического соединения с базой данных. Объект Session является легким и предназначен для реализации каждый раз, когда необходимо взаимодействие с базой данных. Постоянные объекты сохраняются и извлекаются через объект Session.

Объекты сеанса не должны оставаться открытыми в течение длительного времени, потому что они обычно не являются потокобезопасными, и их следует создавать и уничтожать по мере необходимости. Основная функция Session — предлагать, создавать, читать и удалять операции для экземпляров классов сопоставленных сущностей.

Экземпляры могут существовать в одном из следующих трех состояний в данный момент времени —

  • временный — новый экземпляр постоянного класса, который не связан с сеансом и не представлен в базе данных, а значение идентификатора не считается временным в Hibernate.

  • persistent — вы можете сделать временный экземпляр постоянным, связав его с сеансом. Постоянный экземпляр имеет представление в базе данных, значение идентификатора и связан с сеансом.

  • detached — после того, как мы закроем Hibernate Session, постоянный экземпляр станет отдельным экземпляром.

временный — новый экземпляр постоянного класса, который не связан с сеансом и не представлен в базе данных, а значение идентификатора не считается временным в Hibernate.

persistent — вы можете сделать временный экземпляр постоянным, связав его с сеансом. Постоянный экземпляр имеет представление в базе данных, значение идентификатора и связан с сеансом.

detached — после того, как мы закроем Hibernate Session, постоянный экземпляр станет отдельным экземпляром.

Экземпляр 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 .

Транзакция beginTransaction ()

Начните единицу работы и верните связанный объект транзакции.

void cancelQuery ()

Отмените выполнение текущего запроса.

void clear ()

Полностью очистить сессию.

Соединение закрыто ()

Завершите сеанс, освободив соединение JDBC и очистив.

Критерии createCriteria (Класс persistentClass)

Создайте новый экземпляр Criteria для данного класса сущности или суперкласса класса сущности.

Критерии createCriteria (String entityName)

Создайте новый экземпляр Criteria для данного имени объекта.

Сериализуемый getIdentifier (Объектный объект)

Вернуть значение идентификатора данного объекта, связанного с этим сеансом.

Запрос createFilter (Коллекция объектов, String queryString)

Создайте новый экземпляр Query для данной коллекции и строку фильтра.

Запрос createQuery (String queryString)

Создайте новый экземпляр Query для заданной строки запроса HQL.

SQLQuery createSQLQuery (String queryString)

Создайте новый экземпляр SQLQuery для данной строки запроса SQL.

void delete (объектный объект)

Удалите постоянный экземпляр из хранилища данных.

void delete (String entityName, Object object)

Удалите постоянный экземпляр из хранилища данных.

Сеанс get (String entityName, Serializable id)

Вернуть постоянный экземпляр указанного именованного объекта с указанным идентификатором или значение NULL, если такого постоянного экземпляра нет.

SessionFactory getSessionFactory ()

Получить фабрику сеансов, которая создала этот сеанс.

void refresh (объектный объект)

Перечитайте состояние данного экземпляра из базовой базы данных.

Транзакция getTransaction ()

Получить экземпляр транзакции, связанный с этим сеансом.

логическое isConnected ()

Проверьте, подключен ли сеанс в данный момент.

логическое isDirty ()

Содержит ли этот сеанс какие-либо изменения, которые должны быть синхронизированы с базой данных?

логическое isOpen ()

Проверьте, открыт ли сеанс.

Сериализуемое сохранение (объектный объект)

Сохраните данный временный экземпляр, сначала назначив сгенерированный идентификатор.

void saveOrUpdate (Объектный объект)

Сохраните (Object) или обновите (Object) данный экземпляр.

void update (Объектный объект)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.

void update (String entityName, Object object)

Обновите постоянный экземпляр с помощью идентификатора данного отдельного экземпляра.