openSession
: Quando chiami SessionFactory.openSession
, crea sempre un nuovo Session
oggetto e te lo regala.
È necessario svuotare e chiudere esplicitamente questi oggetti sessione.
Poiché gli oggetti sessione non sono thread-safe, è necessario creare un oggetto sessione per richiesta in un ambiente multi-thread e una sessione per richiesta anche nelle applicazioni Web.
getCurrentSession
: Quando chiami SessionFactory.getCurrentSession
, ti fornirà l'oggetto sessione che si trova in un contesto di ibernazione e gestito internamente da ibernazione. È vincolato all'ambito della transazione.
Quando chiami SessionFactory.getCurrentSession
, crea un nuovoSession
se non esiste, altrimenti usa la stessa sessione che si trova nel contesto di ibernazione corrente. Svuota e chiude automaticamente la sessione al termine della transazione, quindi non è necessario eseguirla esternamente.
Se si utilizza l'ibernazione in un ambiente a thread singolo, è possibile utilizzare getCurrentSession
, poiché è più veloce nelle prestazioni rispetto alla creazione di una nuova sessione ogni volta.
Per utilizzare il metodo è necessario aggiungere la seguente proprietà a hibernate.cfg.xmlgetCurrentSession
:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
oclose()
. Lui chiama sologetCurrentSession()
. Credo che si mettecurrent_session_context
athread
. Ora penso di aver capitogetCurrentSession()
. Tuttavia, non so quando dovrei usareopenSession()
.