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