デッドロックはエラー1213を返しますが、これはクライアント側で処理する必要があります
デッドロックとロック待機は別のものであることに注意してください。デッドロックでは、「失敗した」トランザクションはありません。どちらも有罪です。どちらがロールバックされるかは保証されません。
rollback
を使用する必要があります 、スタイルコードは重複を挿入します。たとえば、次のようにする必要があります:
$retry = 0;
$done = false;
$this->entityManager->getConnection()->beginTransaction(); // suspend auto-commit
while (!$done and $retry < 3) {
try {
$this->entityManager->flush();
$this->entityManager->getConnection()->commit(); // commit if succesfull
$done = true;
} catch (\Exception $e) {
$this->entityManager->getConnection()->rollback(); // transaction marked for rollback only
$retry++;
}
}
この助けを願っています。