Как поставить пессимистическую блокировку на метод JPA репозитория без нативного SQL?

В JPA для установки пессимистической блокировки на метод репозитория без использования нативного SQL можно использовать аннотацию @Lock с типом LockModeType.PESSIMISTICWRITE или PESSIMISTICREAD.

Короткий ответ

Что ответить на собеседовании

В JPA для установки пессимистической блокировки на метод репозитория без использования нативного SQL можно использовать аннотацию @Lock с типом LockModeType.PESSIMISTICWRITE или PESSIMISTICREAD.

Подробный разбор

Ответ с пояснениями

В JPA для установки пессимистической блокировки на метод репозитория без использования нативного SQL можно использовать аннотацию @Lock с типом LockModeType.PESSIMISTIC_WRITE или PESSIMISTIC_READ.

Пример:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import javax.persistence.LockModeType;
import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select u from User u where u.id = :id")
    Optional<User> findByIdWithLock(Long id);
}

В этом примере метод findByIdWithLock будет использовать пессимистическую блокировку записи, что гарантирует, что другие транзакции не смогут изменить или получить блокировку на эту запись, пока текущая транзакция не завершится.

Важно, чтобы вызов этого метода происходил внутри транзакции (например, с аннотацией @Transactional).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее