Sobes.tech
Back to questions
Junior — Middle
51

Объясните принцип работы Pessimistic Locking в рамках Spring и его применение при работе с базой данных

Companies where asked
R-Style Softlab
Северсталь-ИфокомСеверсталь-Ифоком

Answer from AI

sobes.tech AI

Pessimistic Locking (пессимистичная блокировка) — это стратегия управления конкурентным доступом к данным, при которой запись в базе данных блокируется на время транзакции, чтобы предотвратить одновременное изменение другими транзакциями.

В Spring для реализации пессимистичной блокировки используется аннотация @Lock(LockModeType.PESSIMISTIC_WRITE) или PESSIMISTIC_READ в репозиториях JPA. При таком подходе при чтении или обновлении записи она блокируется на уровне базы, и другие транзакции ждут освобождения блокировки.

Применение:

  • Используется, когда важно избежать конфликтов при одновременном обновлении данных.
  • Помогает предотвратить потерю данных или состояние гонки.

Пример использования в Spring Data JPA:

public interface UserRepository extends JpaRepository<User, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select u from User u where u.id = :id")
    User findByIdForUpdate(@Param("id") Long id);
}

В этом примере при вызове findByIdForUpdate запись пользователя будет заблокирована для записи до окончания транзакции.