openSession
: Kiedy dzwonisz SessionFactory.openSession
, zawsze tworzy nowy Session
obiekt i daje ci go.
Musisz jawnie opróżnić i zamknąć te obiekty sesji.
Ponieważ obiekty sesji nie są bezpieczne dla wątków, musisz utworzyć jeden obiekt sesji na żądanie w środowisku wielowątkowym i jedną sesję na żądanie również w aplikacjach internetowych.
getCurrentSession
: Kiedy zadzwonisz SessionFactory.getCurrentSession
, dostarczy ci obiekt sesji, który jest w kontekście hibernacji i wewnętrznie zarządzany przez hibernację. Jest to związane z zakresem transakcji.
Kiedy dzwonisz SessionFactory.getCurrentSession
, tworzy nową, Session
jeśli nie istnieje, w przeciwnym razie użyj tej samej sesji, która jest w bieżącym kontekście hibernacji. Automatycznie opróżnia i zamyka sesję po zakończeniu transakcji, więc nie musisz robić tego zewnętrznie.
Jeśli używasz hibernacji w środowisku jednowątkowym, możesz użyć getCurrentSession
, ponieważ jest szybszy w porównaniu do tworzenia nowej sesji za każdym razem.
Aby użyć metody, musisz dodać następującą właściwość do hibernate.cfg.xmlgetCurrentSession
:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
aniclose()
. On tylko dzwonigetCurrentSession()
. Chyba ustawiacurrent_session_context
sięthread
. Teraz myślę, że rozumiemgetCurrentSession()
. Jednak nie wiem, kiedy powinienem użyćopenSession()
.