138 votes

Hibernate openSession() vs getCurrentSession()

J'ai quelques questions à propos de l'utilisation d'Hibernate dans les JSP de l'application web.

  1. Quelle devrait être la valeur pour l' hibernate.current_session_context_class?

  2. Alors, lequel des énoncés suivants devraient être utilisés? Et pourquoi?

     Session s = HibernateUtil.getSessionFactory().openSession();
     Session s = HibernateUtil.getSessionFactory().getCurrentSession()
    
  3. Enfin, quel est le meilleur "une séance par web app" ou "une seule session par la demande"?

154voto

gkamal Points 9679

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"

-7voto

swamy Points 6

SessionFactory: "Une SessionFactory par application et par la Base de données" ( par exemple, si vous utilisez 3 de la Base de données dans notre application , vous devez créer une sessionFactory objet par chaque DB , totalement vous devez créer 3 sessionFactorys . ou sinon si vous avez une seule Base de données d'Une sessionfactory est assez ).

Session: "Une séance pour un cycle de requête-réponse". vous pouvez ouvrir de session lorsque la demande est venu et vous pouvez fermer la session après l'achèvement du processus de demande. Remarque:-Ne pas utiliser une session de l'application web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X