Sollte eine Verbindung, die aus einer hibernate-session geschlossen werden?
Muss ich manuell schließen eine Verbindung, die aus einer hibernate-session?
Wenn ich das mache, habe ich die Schließung einer der verbindungen im connection pool?
Hibernate automatisch die Verbindung zu schließen, wenn ich nicht?
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String query = "sql query";
try {
Session session = this.sessionFactory.getCurrentSession();
con = session.connection();
ps = con.prepareStatement(query);
rs = ps.executeQuery();
while (rs.next()) {
//read result set
}
} catch (SQLException exp) {
log.error("Error: ", exp);
} finally{
if(ps != null)
ps.close();
if(con != null)
con.close(); //Is this required?
}
- Sie sollten immer in der NÄHE JEDER VERBINDUNG, unabhängig davon, dass es ein stream, connection pool , direkten Zugriff auf die db..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, sollten Sie
close
die Verbindung. Wenn Sie einen Verbindungspool, sollten Sie trennen der Sitzung, dies wird nicht schließen, aber es wird geben es zurück an den pool.Für nicht-Verbindungs-pools. In den javadocs es Staaten
Jedoch, wie es geschlossen wird, wäre es besser selbst tun.
Im Allgemeinen Nein, Sie sollten nicht in der Nähe, die Verbindung. Die hibernate-session können noch wollen, verwenden Sie die gleiche connection-Objekt für die weiteren Aufgaben in der Lebens-Zyklus der Sitzung, dass Sie gehen, um zu brechen mit der Schließung der Verbindung. Es ist hibernate job Verwaltung des Lebenszyklus das connection-Objekt.
Ausnahme ist, wie beschrieben in der javadoc, wenn Sie ConnectionReleaseMode.AFTER_STATEMENT eingeschaltet und die JDBC-provider unterstützt diesen Modus. Das ist nicht oft der Fall ist, da Sie im auto-commit-Modus zu arbeiten.
In general no you should not close that connection
, haben Sie Quelle, um dies zu unterstreichen? Einige andere Leute sagen, wir sollten immer in der Nähe, also ich bin verwirrt, sollen wir schließen?getCurrentSession
.Ruhezustand sollte die Veröffentlichung von JDBC-verbindungen. Standardmäßig wird eine JDBC-Verbindung gehalten wird, bis die Sitzung explizit geschlossen wird oder die Verbindung getrennt. Für eine Anwendung mit server-JTA-datasource verwenden after_statement zu aggressiv release-verbindungen nach jedem JDBC-Aufruf. Für eine non-JTA-Verbindung, macht es oft Sinn, um die Verbindung zu lösen, am Ende jeder Transaktion, durch die Verwendung after_transaction. auto wählen after_statement für die JTA-und CMT-Transaktion Strategien und after_transaction für die JDBC Transaktion Strategie.
z.B. auto (Standard) | on_close | after_transaction | after_statement