2009-08-14 7 views
3

Ils disent que construire une usine de sessions dans NHibernate est coûteux et que cela ne devrait se produire qu'une seule fois. J'utilise une approche singleton à ce sujet. Ceci est fait la première fois qu'une session est demandée.NHibernate SessionFactory

Ma question: y aurait-il un moment où vous devriez fermer l'atelier de la session? Si oui, quand ferions-nous cela?

Répondre

6

C'est ce que je fais en Java avec Hibernate:

public class HibernateUtil 
{ 

    private static final SessionFactory sessionFactory; 

    static 
    { 
     try 
     { 
      // Create the SessionFactory from hibernate.cfg.xml 
      sessionFactory = new Configuration().configure().buildSessionFactory(); 
     } 
     catch (Throwable ex) 
     { 
      // Make sure you log the exception, as it might be swallowed 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() 
    { 
     return sessionFactory; 
    } 

} 

Vous pouvez libérer votre SessionFactory lorsque vous n'avez plus besoin, je suppose, mais honnêtement je n'ai jamais fermé mon usine session

+2

Faire presque la même chose dans .NET. Seule la configuration est un peu différente à cause de FluentNHibernate. –

1

Non, il meurt avec votre programme et c'est bien.

0

Il ne doit exister qu'une seule instance de sessionfactory. Le code ci-dessus n'est pas un exemple de pattern singleton. Si vous travaillez dans une application d'entreprise, je suggère d'utiliser Spring avec Hibernate. Cela vous aiderait dans la gestion des transactions et enlève tout ce mal de tête de la gestion de session d'usine

2

A AZ: Cela fait référence à la SessionFactory, pas la session. Bien que je ne dirais pas qu'il devrait y avoir une seule instance de SessionFactory. Il devrait y en avoir un par configuration unique. Par exemple, si une seule application se connecte à deux bases de données différentes, vous avez besoin de deux instances SessionFactory différentes.

+0

Ajouter ce commentaire comme commentaire à la publication de AZ et non comme réponse à la question. Les réponses doivent être des réponses à des questions et non des commentaires sur les réponses des autres. – Phil

Questions connexes