2010-07-28 2 views
24

Je suis assez nouveau sur les ORM. Je commence juste à lire des livres et des documents sur l'API Java Persistence avec Hibernate.Quand devrions-nous fermer EntityManagerFactory?

Je me demandais juste, la fermeture EntityManagerFactory est similaire avec la fermeture de la connexion de base de données jdbc?

Devrions-nous le fermer après chaque persistance/mise à jour/suppression ou non? Si nous ne le fermons pas, la connexion à la base de données restera-t-elle ouverte?

+0

Si un EM détient des connexions, comment une connexion peut-elle rester ouverte si l'hôte ou le parent est fermé? Cela a-t-il du sens ? –

Répondre

32

Je me demandais juste que la fermeture de EntityManagerFactory est similaire avec la fermeture de la base de données jdbc? Ce n'est pas tout à fait vrai, mais la fermeture d'un EntityManagerFactory serait plus proche de la destruction d'un pool de connexions complet. Si vous voulez penser à la connexion JDBC, vous devriez penser EntityManager. Devrions-nous le fermer après chaque persister/mettre à jour/supprimer ou non?

Création d'un EntityManagerFactory est une opération assez coûteuse et doit être fait une fois pour la durée de vie de l'application (vous close à la fin de l'application). Donc, non, vous ne devriez pas le fermer pour chaque opération de persistance/mise à jour/suppression.

Le EntityManagerFactory est créé une fois pour toutes et vous obtenez généralement une EntityManager par demande, qui est fermé à la fin de la demande (EntityManager par demande est le modèle le plus courant pour une application client/serveur multi-utilisateurs).

Si nous ne le fermons pas, la connexion à la base de données restera-t-elle ouverte?

comme le laisse entendre, il est le EntityManager qui est en fait associé à une connexion de base de données et la fermeture de la EntityManager va effectivement libérer la connexion JDBC (le plus souvent, le retour à une piscine).