2017-04-04 2 views
0

Ich verwende ein dynamisches Webprojekt. Ich öffne die Sitzung, wenn der Server startet. Ich benutze eine einzelne Tonne statische Klasse für diesen Zweck und benutze die Sitzung überall herum.Wann soll die Hibernate-Sitzung beendet werden?

Aber ich bin mir nicht sicher, wann die Sitzung geschlossen werden soll. Weißt du, wo es behandelt werden könnte? Was ist die beste Praxis?

Antwort

1

Es gibt zwei Objekt in Hibernate:

Short Answer : 
SessionFactory : Heavy Weight. 
Session : light weight. 

Lange Antwort:

Session ist verantwortlich für die Verbindung mit Datenbank zu erstellen und andere Sachen Verwaltung, so der Schaffung session Zeit raubende Aufgabe . Also werde ich sagen, dass nur ein sessionFactory-Objekt pro Anwendung erstellt werden sollte, oder besser gesagt, eine SeesionFactory pro Datenbank.

Nun zu Ihrer Sitzung kommt, ist es ein leichtes Objekt, für jede Transaktion können Sie ein Sitzungsobjekt erstellen, wenn Sie mit der Transaktion fertig sind, können Sie die Sitzung schließen.

0

Hibernate-Sitzung sollte geschlossen werden, wenn die Transaktion geschlossen wird. Eine Sitzung pro Anfrage ist der beste Ansatz. Session ist Thread nicht sicher

1

Sie sollten Ihre Sitzung so lange beibehalten, wie Sie mit Ihrer Datenbank verbunden werden möchten.

Aber Sitzungen sind keine Thread-sicheren Objekte und können nicht von mehreren Threads gemeinsam genutzt werden. Sie sollten also eine Sitzung pro Anfrage verwenden.

So Grund ist, wenn Sie eine Single-Thread-Anwendung verwenden, dann ist es besser, eine Sitzung für Ihre gesamte Anwendung zu verwenden. Sie können dazu SessionFactory.getCurrentSession() verwenden.

Wenn Ihre Anwendung jedoch für mehrere Threads freigegeben ist, sollten Sie immer neue Sitzungen mit SessionFactory.openSession() öffnen. Obwohl das langsamer als das vorherige ist, ist es Thread-sicher.

Wissen Sie, wo könnte es

Am besten ist es behandelt werden, um sie in finally Block zu schließen. Wenn Sie jedoch Java SE 7 und höher verwenden, können Sie sie auch in try-with-resources behandeln.

+0

@ScaryWombat in Java SE 7 und später –

0

Sie können den Ruhezustand konfigurieren, um die Sitzung automatisch zu öffnen und zu schließen, und Sie müssen sie nicht manuell schließen. wenn Sie von Hand öffnen und schließen möchten, öffnen Sie Ihre Sitzung, führen Sie Ihre Anfrage und in der Nähe Sitzung:

Transaction tx = session.beginTransaction(); 
    try { 
     for (int i = 0; i < mesages.size(); i++) { 
      Message message = messages.get(i); 
      session.save(message); 
      if (i % 75 == 0) { 
       // flush a batch of inserts and release memory: 
       session.flush(); 
       session.clear(); 
      } 
     } 
     tx.commit(); 
    }catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     tx.rollBack(); 
    }finally{ 
     session.close(); 
    } 
} 

oben Code Frage Link: How to properly close and open a Hibernate session?

können Sie auch über Hibernate Session-Ansicht filtern zu handhaben offen und Sitzung automatisch schließen

Verwandte Themen