openSession: Quando chiami SessionFactory.openSession, crea sempre un nuovo Sessionoggetto 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_contextathread. Ora penso di aver capitogetCurrentSession(). Tuttavia, non so quando dovrei usareopenSession().