Закройте открытые сеансы гибернации, если они существуют - PullRequest
1 голос
/ 15 декабря 2011

Когда сеанс Hibernate открыт (sessionFactory.openSession()), он может быть закрыт.Все в порядке.Если пропущено закрытие открытого сеанса, который используется для извлечения данных (не для сохранения, обновления или удаления) в любом месте приложения, как закрыть открытые сеансы, если они существуют?

(скажем, когдаJFrame закрыто, если имеются открытые сеансы, они должны быть закрыты. Закрытие сеансов может быть выполнено, просматривая коды один за другим, но я имею в виду, здесь, без проверки кодов, есть ли способ закрыть сеансы, которыепропустил, чтобы закрыть какой-то кусок кода).

1 Ответ

3 голосов
/ 16 декабря 2011

Почему вы не закрываете сеанс после завершения операции с базой данных?Я имею в виду, что в классах DAO вы получаете открытую сессию и выполняете операции с базой данных.И, наконец, блок, закройте сеанс.Вы можете закрыть сессию, например:

finally {
   if(session!=null){
      session.close();
   }
}

ИЛИ

Вы можете получить текущую сессию, используя

Session sess = sessionFactory.getCurrentSession();

И закрыть сессию при закрытии события JFrame.

Я получаю следующие строки от этой ссылки

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

И наша обязанность - закрыть сеанс после завершения операции или транзакции.Когда мы закрываем сеанс, все ресурсы (пулы соединений и т. Д.) Освобождаются должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...