openSession
: Lorsque vous appelez SessionFactory.openSession
, il crée toujours un nouvel Session
objet et vous le donne.
Vous devez explicitement vider et fermer ces objets de session.
Comme les objets de session ne sont pas thread-safe, vous devez créer un objet de session par demande dans un environnement multi-thread et une session par demande dans les applications Web également.
getCurrentSession
: Lorsque vous appelez SessionFactory.getCurrentSession
, il vous fournira un objet de session qui est dans un contexte de mise en veille prolongée et géré par hibernate en interne. Il est lié à la portée de la transaction.
Lorsque vous appelez SessionFactory.getCurrentSession
, il en crée un nouveau Session
s'il n'existe pas, sinon utilisez la même session qui se trouve dans le contexte de mise en veille prolongée actuel. Il vide et ferme automatiquement la session lorsque la transaction se termine, vous n'avez donc pas besoin de le faire en externe.
Si vous utilisez la mise en veille prolongée dans un environnement à thread unique, vous pouvez l'utiliser getCurrentSession
, car ses performances sont plus rapides que la création d'une nouvelle session à chaque fois.
Vous devez ajouter la propriété suivante à hibernate.cfg.xml pour utiliser la getCurrentSession
méthode:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()
ouclose()
. Il appelle seulementgetCurrentSession()
. Je suppose qu'il fixecurrent_session_context
àthread
. Maintenant, je pense que je comprendsgetCurrentSession()
. Cependant, je ne sais pas quand dois-je utiliseropenSession()
.