2016-05-02 7 views
1

Wann sollte ich die Verbindung zur Datenbank schließen? Ich schaffe Verbindung einer Zeit, wenn die Anwendung starten, und dann verwende ich Entity-Manager auf diese Weise:Wann sollte ich den Entity Manager schließen?

public void createItem(TYPE item){ 
     em.getTransaction().begin(); 
     em.persist(item); 
     em.getTransaction().commit(); 
    } 

public class Connection { //creating connection (one time) 
     private static final String PERSISTENCE_UNIT_NAME = "ejb"; 
     private static EntityManagerFactory factory; 
     private static EntityManager em; 

     static{ 
      factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
      em = factory.createEntityManager(); 
     } 
     public static EntityManager getEntityManager() { 
     return em; 
     } 
} 

Ich denke, es macht keinen Sinn Verbindung evey jede Operation (wie erstellen) und erstellen Sie neue Connecion zu schließen, wenn ich Ich möchte den Artikel erneut speichern.

+1

Mögliche Duplikat [Hibernate EntityManager, soll es als Singleton verwendet werden?] (Http://stackoverflow.com/questions/9370819/hibernate-entitymanager-is -es-soll-benutzt-als-ein-singleton) – Raffaele

Antwort

2

Sie sollten den Entitymanager nicht statisch machen, es sollte ein Objekt sein, das entfernt wird, nachdem Sie Ihre Transaktionen ausgeführt haben. Dies bedeutet auch, dass Sie es nach Abschluss der Operation schließen sollten. EntitymanagerFactory kann statisch bleiben, Sie brauchen nur 1 für jeden Programmlauf. Der Grund, warum Sie es schließen sollten, ist, dass Sie Ressourcen auf Ihrem Gerät verschwenden.

Längerer/bessere Erklärung auf EMF https://stackoverflow.com/a/4544053/6270761