Doctrine2 Dead Lock - wie man damit umgeht

8

In einem symfony2-Projekt, an dem ich gerade arbeite, kommt es manchmal zu dead locks beim Aufruf von flush auf meinem Entitymanager. Dies führt zu einer Ausnahme. Meistens tritt dieser Fehler nur einmal auf und ein zweiter Versuch, dieselben Daten einzufügen, funktioniert korrekt.

Gibt es einen guten Ansatz, dieselbe Transaktion erneut auszuführen (zu leeren). So einfach

%Vor%

geht nicht, da der Entitymanager geschlossen wird, wenn ein Fehler auftritt.

Ich habe Ссылка Bit gefunden, das keine Lösung bietet.

    
Rene Terstegen 01.05.2014, 09:33
quelle

1 Antwort

0

Ich würde verwenden explizite Abgrenzung der Transaktionen , um den Stillstand hoffentlich zu verhindern. Standardmäßig ist nur flush() in eine Transaktion eingebunden.

Alternativ können Sie möglicherweise Ihre Prozedur ändern, um die DQL UPDATE -Abfrage zu verwenden, die atomar sein sollte.

Oder senden Sie die Anfrage erneut an die Aktion (mit einem gewissen Rekursionslimit).

Ich bin mir nicht sicher, ob es eine gute Möglichkeit gibt, den Entity Manager neu zu starten, aber die Arbeitseinheit beizubehalten.

    
Ryan 05.01.2017 03:26
quelle

Tags und Links