Comme expliqué dans ce forum post, 1 et 2 sont liés. Si vous définissez hibernate.current_session_context_class
de l'enfiler et de les mettre quelque chose comme un filtre de servlet qui ouvre la session, vous pouvez alors accéder à la session de n'importe où ailleurs en utilisant l' SessionFactory.getCurrentSession()
.
SessionFactory.openSession()
ouvre toujours une nouvelle session que vous avez à fermer une fois que vous avez terminé avec les opérations. SessionFactory.getCurrentSession()
renvoie une session lié à un contexte - vous n'avez pas besoin de fermer cette.
Si vous utilisez le Printemps ou les Ejb pour gérer les transactions, vous pouvez les configurer pour ouvrir / fermer les sessions avec les transactions.
Vous ne devez jamais utiliser "une séance par web app" - session n'est pas thread-safe de l'objet ne peut pas être partagée par plusieurs threads. Vous devriez toujours utiliser "une session, conformément à la demande" ou "une séance par transaction"