В JPA для установки пессимистической блокировки на метод репозитория без использования нативного SQL можно использовать аннотацию @Lock с типом LockModeType.PESSIMISTICWRITE или PESSIMISTICREAD.
Как поставить пессимистическую блокировку на метод JPA репозитория без нативного SQL?
В 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).