Wie in diesem Forum erklärten Post , 1 und 2 betreffen. Wenn Sie hibernate.current_session_context_class
Thread festlegen und dann so etwas wie einen Servlet-Filter implementieren, der die Sitzung öffnet, können Sie mit der Taste auf diese Sitzung an einer anderen Stelle zugreifen SessionFactory.getCurrentSession()
.
SessionFactory.openSession()
Öffnet immer eine neue Sitzung, die Sie schließen müssen, wenn Sie mit den Vorgängen fertig sind. SessionFactory.getCurrentSession()
Gibt eine an einen Kontext gebundene Sitzung zurück - Sie müssen diese nicht schließen.
Wenn Sie Spring oder EJBs zum Verwalten von Transaktionen verwenden, können Sie diese so konfigurieren, dass Sitzungen zusammen mit den Transaktionen geöffnet / geschlossen werden.
Sie sollten niemals verwenden one session per web app
- Sitzung ist kein threadsicheres Objekt - kann nicht von mehreren Threads gemeinsam genutzt werden. Sie sollten immer "eine Sitzung pro Anforderung" oder "eine Sitzung pro Transaktion" verwenden.
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()
.Sessions
. Können Sie mir bitte dabei helfen unter - stackoverflow.com/questions/23351083/… . Danke und Chenqui.Wenn wir über SessionFactory.openSession () sprechen
Und wenn wir über SessionFactory.getCurrentSession () sprechen
quelle
getCurrentSession
würde, würde es dieselbe Sitzung wiederverwenden, nicht wahr?openSession
: Wenn Sie anrufenSessionFactory.openSession
, wird immer ein neuesSession
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 aufrufenSessionFactory.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 neueSession
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:quelle
quelle
SessionFactory: "Eine SessionFactory pro Anwendung pro Datenbank" (z. B. wenn Sie in unserer Anwendung 3 Datenbanken verwenden, müssen Sie ein SessionFactory-Objekt pro Datenbank erstellen, insgesamt müssen Sie 3 sessionFactorys erstellen, oder wenn Sie nur eine DataBase One-Sessionfactory haben reicht ).
Sitzung: "Eine Sitzung für einen Anforderungs- / Antwortzyklus". Sie können die Sitzung öffnen, wenn die Anforderung eingegangen ist, und die Sitzung nach Abschluss des Anforderungsprozesses schließen. Hinweis: - Verwenden Sie keine Sitzung für Webanwendungen.
quelle