Eine Sitzung wird eröffnet, wenn sf.getCurrentSession()
zum ersten Mal aufgerufen wird. Dabei wird eine ganz neue Sitzung erstellt, falls noch keine vorhanden ist, oder eine vorhandene Sitzung verwendet, falls bereits eine vorhanden ist.
In Tomcat wird dadurch eine Sitzung mit einem Thread verknüpft, der unter Verwendung der zugrunde liegenden ThreadLocal
Objekt. Da Tomcat jedoch Thread-Pooling verwendet, ist es durchaus möglich, dass eine Anfrage einen Thread erhält, dem bereits eine Sitzung zugeordnet ist, so dass die Möglichkeit besteht, nicht einmal eine ganz neue Sitzung zu erstellen. Ein weiterer Punkt ist, dass die Session, die Sie mit sf.getCurrentSession()
wird automatisch gespült und geschlossen.
Die Methode sf.openSession()
hingegen erstellt eine neue Sitzung, versucht aber nicht, sie mit einem Thread zu verknüpfen. Aber denken Sie daran sf.openSession()
führt ein weiteres Problem ein, da es von den Benutzern erwartet, dass sie das Schließen und Leeren von Sitzungen selbst erledigen, anstatt dies automatisch von Hibernate erledigen zu lassen.
sf.getCurrentSession()
ist in der Regel ausreichend. sf.openSession()
bietet und erleichtert ein größeres Maß an Verwaltung, wo die Sitzung gespeichert und verwaltet wird. Das ist sicherlich eine fortschrittliche Option.