Warum ist “hibernate.- Verbindung.autocommit = true" nicht empfohlen " in den Ruhezustand?
In der Hibernate-API, es ist eine Eigenschaft, die hibernate.- Verbindung.autocommit kann auf true gesetzt werden.
Aber in der API, Sie haben erwähnt, dass es ist nicht empfehlenswert, es so auf:
Ermöglicht autocommit für JDBC zusammengefassten verbindungen (es ist nicht
empfohlen).
Warum ist es nicht empfehlenswert ?
Was sind die negativen Auswirkungen, die das setzen dieser Eigenschaft auf true ?
InformationsquelleAutor der Frage Ponmudi VN | 2014-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig autocommit-Wert ist false, daher wird die Transaktion commited ausdrücklich. Dies könnte der Grund sein, warum die änderungen nicht immer spiegelt sich in der Datenbank, sonst kann versuchen flush zu zwingen, die änderungen vor dem commit.
Wenn Sie die Sitzung schließen, dann wird es begangen, die in der Datenbank implizit [hängt von der Implementierung].
Wenn Sie kaskadierende Transaktionen & muss rollback für die Unteilbarkeit, die Sie benötigen, um die Kontrolle über Transaktionen, die & in diesem Fall autocommit false sein sollte.
Entweder setzen Sie autocommit als wahr oder Transaktionen explizit.
Hier ist eine gute Erklärung drauf.
Hibernate forum damit in Zusammenhang stehen.
Stackoverflow-Frage .
InformationsquelleAutor der Antwort user3145373 ツ
Mein Verständnis ist, dass, wenn Hibernate autocommits, dann ein flush haben, schlägt fehl, einen Teil des Weges durch nicht zurückgesetzt werden. Sie haben eine unvollständige/defekte Objekt graph.
Wenn Sie möchten, eine Verbindung mit autocommit auf für etwas, Sie können immer Auspacken einer neu erstellten
Session
um die zugrunde liegenden JDBC-VerbindungsetAutocommit(true)
auf Sie, tun Sie Ihre Arbeit über JDBC-APIssetAutocommit(false)
und die Sitzung zu schließen. Ich würde nicht empfehlen, tun dies auf eineSession
das ist schon etwas getan.InformationsquelleAutor der Antwort Craig Ringer
Alle Datenbank-Anweisungen ausgeführt, die im Rahmen einer physischen Transaktion, selbst wenn wir nicht ausdrücklich erklären, die Transaktion Grenzen (BEGIN/COMMIT/ROLLBACK).
Wenn Sie nicht erklären, die Transaktion Grenzen, dann wird jede Anweisung werden in einer eigenen Transaktion ausgeführt. Dies kann sogar dazu führen, dass das öffnen und schließen einer Verbindung pro Anweisung.
Deklarieren Dienst als @Transactional geben Sie einen Anschluss für die gesamte Transaktion Dauer, und alle Aussagen verwenden, die einzigen isolation-Verbindung. Dies ist viel besser als die nicht mit expliziten Transaktionen in den ersten Platz. Auf große Anwendungen, die Sie möglicherweise haben viele gleichzeitige Anfragen und Reduzierung der Datenbank-Verbindung erwerben Wunsch bewerten ist definitiv eine Verbesserung Ihre Gesamt-Leistung der Anwendung.
Also die Faustregel ist:
Wenn Sie nur-lese-Transaktionen, die nur ausführen einer Abfrage, aktivieren Sie auto-commit für diejenigen.
Wenn Sie Transaktionen mit mehr als nur einer Anweisung, müssen Sie deaktivieren Sie auto-commit aus, da möchte man alle Operationen ausführen, die in einer einzigen Einheit-der-Arbeit-und Sie nicht möchten, um zusätzlichen Druck auf den connection pool.
InformationsquelleAutor der Antwort Vlad Mihalcea
Verwenden Sie nicht die Sitzung-je-operation antipattern: öffnen und schließen Sie eine Sitzung für jede einfache Datenbank-Aufruf in einem einzigen thread. Das gleiche gilt für Datenbank-Transaktionen. Datenbank-Aufrufe in einer Anwendung mit einer geplanten Sequenz; Sie Gliedern sich in atomaren Einheiten zu arbeiten. Dies bedeutet auch, dass auto-commit nach jeder einzelnen SQL-Anweisung ist nutzlos in einer Anwendung wie dieser Modus ist gedacht für ad-hoc-SQL-Konsole arbeiten. Ruhezustand deaktiviert, oder erwartet, dass der Applikations-server zu deaktivieren, auto-commit-Modus sofort. Datenbank Transaktionen sind niemals optional. Die gesamte Kommunikation mit der Datenbank innerhalb einer Transaktion auftreten. Auto-commit-Verhalten für das Lesen von Daten sollte vermieden werden, da viele kleine Transaktionen sind kaum besser als eine klar definierte Einheit der Arbeit. Letzteres ist auch besser wartbar und erweiterbar.
finden Sie mehr Informationen zu diesem Thema
InformationsquelleAutor der Antwort newday