Sobes.tech
Back to questions
Senior
4

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

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В 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).