openSession
: Когда вы звоните SessionFactory.openSession
, он всегда создает новый Session
объект и передает его вам.
Вам необходимо явно очистить и закрыть эти объекты сеанса.
Поскольку объекты сеанса не являются потокобезопасными, вам необходимо создать один объект сеанса для каждого запроса в многопоточной среде и один сеанс для каждого запроса в веб-приложениях.
getCurrentSession
: Когда вы вызываете SessionFactory.getCurrentSession
, он предоставит вам объект сеанса, который находится в контексте спящего режима и внутренне управляется спящим режимом. Он привязан к области транзакции.
Когда вы вызываете SessionFactory.getCurrentSession
, он создает новый, Session
если он не существует, в противном случае используется тот же сеанс, который находится в текущем контексте гибернации. Он автоматически сбрасывает и закрывает сеанс по завершении транзакции, поэтому вам не нужно делать это извне.
Если вы используете спящий режим в однопоточной среде, вы можете использовать его getCurrentSession
, так как он быстрее по производительности по сравнению с созданием нового сеанса каждый раз.
Чтобы использовать метод, вам необходимо добавить следующее свойство в hibernate.cfg.xmlgetCurrentSession
:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
илиclose()
. Он только звонитgetCurrentSession()
. Я предполагаю , что он устанавливаетcurrent_session_context
вthread
. Теперь я думаю, что понимаюgetCurrentSession()
. Однако я не знаю, когда мне следует использоватьopenSession()
.