Hibernate-Schreibgeschützte Transaktion

8

Die Hibernate Dokumente zeigen dieses Beispiel:

%Vor%

Warum muss session.getTransaction().commit() ausgeführt werden, obwohl die Ereignisliste lediglich ausgedruckt wurde?

    
Kevin Meredith 06.07.2013, 17:11
quelle

1 Antwort

11

SELECT erfordert auch eine Transaktion. Es ist unmöglich, SELECT ohne irgendeine Transaktion auszuführen. Die Tatsache, dass Sie beim Auswählen von Daten aus der Datenbank mit einigen SQL-GUI-Tools nicht explizit eine Transaktion starten und beenden müssen, ist, dass diese Tools verwenden Autocommit -Modus. Im Autocommit-Modus wird die Datenbank automatisch gestartet und die Transaktion für jede einzelne SQL-Anweisung festgeschrieben, so dass Sie die Transaktionsgrenze nicht explizit deklarieren müssen.

Wenn Sie eine Transaktion nicht beenden (z. B. Festschreibung oder Rollback), wird die Datenbankverbindung, die von dieser Transaktion verwendet wird, nicht freigegeben, und Ihre Datenbank wird eventuell nicht mehr über die verfügbaren Verbindungen verfügen.

Für den Ruhezustand wird standardmäßig der Nicht-Autocommit-Modus verwendet (der durch die Eigenschaft hibernate.connection.autocommit angegeben wird). Also müssen wir die Transaktionsgrenze deklarieren und sicherstellen, dass die Transaktion endet.

Wenn Sie jedoch nur Daten mit der Hibernate-API abfragen, ist es in Ordnung, auch wenn Sie die Transaktionsgrenze nicht explizit deklarieren, weil Folgendes zutrifft:

  1. Die Datenbank startet normalerweise automatisch eine neue Transaktion, wenn die aktuelle SQL-Anweisung eine solche erfordert und zuvor keine Transaktion explizit gestartet wurde.

  2. Session.close() wird schließen ( ) die zugrunde liegende Verbindung . Gemäß der JDBC-Spezifikation , wenn java.sql.Connection # close () wird aufgerufen und es gibt eine aktive Transaktion, das Ergebnis dieser aktiven Transaktion hängt von der Implementierung des JDBC-Lieferanten ab. In der Regel wird der JDBC-Treiber diese Transaktion automatisch festschreiben oder zurücksetzen. In diesem Fall spielt es jedoch keine Rolle, ob die Transaktion festgeschrieben oder zurückgesetzt wird, weil Sie bereits die gewünschten Daten erhalten haben.

Ken Chan 06.07.2013, 21:43
quelle

Tags und Links