openSession
: Wenn Sie anrufen SessionFactory.openSession
, wird immer ein neues Session
Objekt erstellt und Ihnen übergeben.
Sie müssen diese Sitzungsobjekte explizit leeren und schließen.
Da Sitzungsobjekte nicht threadsicher sind, müssen Sie ein Sitzungsobjekt pro Anforderung in einer Umgebung mit mehreren Threads und eine Sitzung pro Anforderung auch in Webanwendungen erstellen.
getCurrentSession
: Wenn Sie aufrufen SessionFactory.getCurrentSession
, erhalten Sie ein Sitzungsobjekt, das sich im Ruhezustand befindet und intern im Ruhezustand verwaltet wird. Es ist an den Transaktionsumfang gebunden.
Wenn Sie aufrufen SessionFactory.getCurrentSession
, wird eine neue Session
Sitzung erstellt, wenn diese nicht vorhanden ist. Andernfalls wird dieselbe Sitzung verwendet, die sich im aktuellen Ruhezustand befindet. Die Sitzung wird automatisch geleert und geschlossen, wenn die Transaktion endet, sodass Sie sie nicht extern ausführen müssen.
Wenn Sie den Ruhezustand in einer Single-Thread-Umgebung verwenden, können Sie ihn verwenden getCurrentSession
, da er im Vergleich zum Erstellen einer neuen Sitzung jedes Mal schneller ist.
Sie müssen folgende Eigenschaft hinzufügen hibernate.cfg.xml zu verwenden getCurrentSession
Methode:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
oder anclose()
. Er ruft nur angetCurrentSession()
. Ich denke, er setztcurrent_session_context
aufthread
. Jetzt glaube ich zu verstehengetCurrentSession()
. Ich weiß jedoch nicht, wann ich verwenden sollopenSession()
.