Как использовать "для обновления" SQL для блокировки строк с помощью Spring JDBCTemplate - PullRequest
0 голосов
/ 27 февраля 2019

Я использую шаблон Spring JDBC для выполнения операций выбора и обновления, а оператор SQL - как показано ниже.Если я запускаю 2 экземпляра моего приложения (скажем, Transaction1 и Transaction2) и даже при том, что оба выбирают один и тот же набор записей, Transaction2 должен ждать, пока Transaction1 не будет зафиксирован.Но это не тот случай, здесь.Transaction2 может обновлять базу данных.

Примечание: методы getNotCompletedRecords () и updateStatusToInProgress () используют методы query () и batchUpdate () JDBCTemplate соответственно.

@Transactional
public synchronized List<Student> processStudentRecords(){
List<Student> students = getNotCompletedRecords();
if(null != students && students.size() > 0){
    updateStatusToInProgress(students);
}
return student;
}

select * from STUDENTS where DEPATMENT_ID in (select distinct (department_id) from STUDENTS where status = 'NOT PROCESSED') fetch FIRST 5 rows only) for update
...