Как заблокировать всю таблицу в symfony2 с помощью doctrine2?

Мне нужно заблокировать всю таблицу (, а не одну строку )с помощью доктрины, я хотел бы сделать это без собственных запросов, если это возможно.

Документация для пессимистической блокировки описывает только то, как блокировать определенные объекты с помощью этих методов :

  • . EntityManager #найти
  • Блокировка EntityManager #
  • Запрос #setLockMode

У меня есть транзакция, которой нужно вставить строку, значения которой зависят от значений остальных строк в таблице, поэтому мне нужно предотвратить одновременное выполнение двух транзакций в этой таблице.

Я использую явное разграничение транзакций, которое должно хорошо работать с блокировкой (в соответствии с приведенной выше документацией ).

ПРИМЕЧАНИЕ:Оптимистическая блокировка в этом случае недостаточно хороша, я не могу позволить себе повторить транзакцию. Кроме того, запрос не должен быть медленным, поэтому производительность не является проблемой.

РЕДАКТИРОВАТЬ:Я приведу пример. Представьте, что вы хотите вручную построить автоматический приращение _, и вам нужно выбрать максимальное значение ()из таблицы, чтобы получить предыдущий результат, чтобы вставить следующий. Вы должны убедиться, что никакие две транзакции не попытаются вставить одно и то же значение, если они одновременно выберут max ().

Я ищу общее решение этой проблемы, когда автоматическое приращение _не подходит, например, для строк или нескольких столбцов, хэшей или любых других вычислений, которые вы должны выполнить для предыдущего набора строк.

Блокировка — надежное решение, и, в отличие от оптимистичной блокировки, вам не нужно повторять попытки при ошибках.

Итак, есть ли способ использовать блокировку таблиц в доктрине?

6
задан Thomas Landauer 15 June 2016 в 11:44
поделиться