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