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().