17 Stimmen

Unterschied zwischen Sessionfactory.getCurrentSession() und SessionFactory.openSession() von Hibernate

Ich bin ein wenig verwirrt zwischen den beiden. Wie ich weiß, gibt beide hibernate Sitzung, SessionFactory.getCurrentSession() gibt eine kontextbezogene Sitzung auf der Grundlage der Eigenschaft <property name="current_session_context_class"> die in hibernate.cfg.xml festgelegt ist Sollten wir nicht immer diesen Ansatz wählen?

Welcher zusätzliche Nutzen ergibt sich aus SessionFactory.openSession() ?

37voto

Hardik Mishra Punkte 14459

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X