Блокирует ли LockModeType.PESSIMISTIC_WRITE результаты или всю таблицу? - PullRequest
0 голосов
/ 10 марта 2020

После поисков некоторое время я сдался, потому что нигде не смог найти этот ответ, поэтому я пытаюсь здесь.

Я использую Spring Boot и CrudRepository для извлечения сущностей из моей базы данных oracle , Однако я не уверен, что этот код, вызванный внутри @Transaction, заблокирует всю мою таблицу или просто только объекты результата, возвращаемые findAllByStatusAndCreatedBetween?

@Repository
public interface MyRepository extends CrudRepository<MyEntity, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    List<MyEntity> findAllByStatusAndCreatedBetween(Status status, Date from, Date to);
}

1 Ответ

0 голосов
/ 10 марта 2020

LockModeType.PESSIMISTIC_WRITE внутренне выполняет select для оператора update.

SELECT FOR UPDATE блокирует строки и все связанные записи индекса, так же, как если бы вы выполнили инструкцию UPDATE для этих строк. Другие транзакции не могут обновлять эти строки, выполнять SELECT ... LOCK IN SHARE MODE или читать данные на определенных уровнях изоляции транзакций. Последовательные чтения игнорируют любые блокировки, установленные для записей, которые существуют в представлении чтения. (Старые версии записи не могут быть заблокированы; они восстанавливаются путем применения журналов отмены к копии записи в памяти.)

Пожалуйста, отметьте https://docs.oracle.com/cd/E17952_01/mysql-5.1-en/innodb-locking-reads.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...