Сессии

Сессия используется для получения физического соединения с базой данных (далее – БД). Благодаря тому, что сессия является легковесным объектом, его создают (открывают сессию) каждый раз, когда возникает необходимость, а потом, когда необходимо, – уничтожают (закрывают сессию). Мы создаем, читаем, редактируем и удаляем объекты с помощью сессий.

Мы стараемся создавать сессии при необходимости, а затем уничтожать их из-за того, что ни не являются потоко-защищенными и не должны быть открыты в течение длительного времени.

Экземпляр класса может находиться в одном из трех состояний:

  • transient
    Это новый экземпляр устойчивого класса, который не привязан к сессии и еще не представлен в БД. Он не имеет значения, по которому может быть идентифицирован.

  • persistent
    Мы модем создать переходный экземпляр класса, связав его с сессией. Устойчивый экземпляр класса представлен в БД, а значение идентификатора связано с сессией.

  • detached
    После того, как сессия закрыта, экземпляр класса становится отдельным, независимым экземпляром класса.

В примитивном виде транзакция выглядит примерно таким образом:

Session session = sessionFactory.openSession();
Transaction transaction = null;

    try{
        transaction = session.beginTransaction();

        /**
         * Here we make some work.
         * */

        transaction.commit();
    }catch(Exception e){
        if(transaction !=null){
            transaction.rollback();
            e.printStackTrace();
        }
        e.printStackTrace();
    }finally{
        session.close();
    }

В этом примере-исключении происходит откат (rollback).

В интерфейсе Session определены 23 метода, которые мы можем использовать:


Transaction beginTransaction()

Начинает транзакцию и возвращает объект Transaction.


void cancelQuery()

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


void clear()

Полностью очищает сессию


Connection close()

Заканчивает сессию, осовобождает JDBC-соединение и выполняет очистку.


Criteria createCriteria(String entityName)

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


Criteria createCriteria(Class persistentClass)

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


Serializable getIdentifier(Object object)

Возвращает идентификатор данной сущности, как сущности, связанной с данной сессией.


void update(String entityName, Object object)

Обновляет экземпляр с идентификатором, указанном в аргументе.


void update(Object object)

Обновляет экземпляр с идентификатором, указанном в аргументе.


voidsaveOrUpdate(Object object)

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


Serializable save(Object object)

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


boolean isOpen()

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


boolean isDirty()

Проверят, есть ли в данной сессии какие-либо изменения, которые должны быть синхронизованы с базой данных (далее – БД).


boolean isConnected()

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


Transaction getTransaction()

Получает связанную с этой сессией транзакцию.


void refresh(Object object)

Обновляет состояние экземпляра из БД.


SessionFactory getSessionFactory()

Возвращает фабрику сессий (SessionFactory), которая создала данную сессию.


Session get(String entityName, Serializable id)

Возвращает сохраненный экземпляр с указанным именем сущности и идентификатором. Если таких сохраненных экземпляров нет – возвращает null.


void delete(String entityName, Object object)

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


void delete(Object object)

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


SQLQuery createSQLQuery(String queryString)

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


Query createQuery(String queryString)

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


Query createFilter(Object collection, String queryString)

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

results matching ""

    No results matching ""