Một deadlock trả về lỗi 1213 mà bạn nên xử lý ở phía máy khách
Lưu ý rằng bế tắc và chờ khóa là những thứ khác nhau. Trong lúc bế tắc, không có giao dịch nào "thất bại":cả hai đều có tội. Không có gì đảm bảo cái nào sẽ được khôi phục.
Bạn phải sử dụng rollback
, mã kiểu của bạn sẽ chèn trùng lặp. ví dụ bạn nên:
$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++;
}
}
Hy vọng sự giúp đỡ này.