我正在使用spring jdbc模板执行选择和更新操作,并且通过sql语句如下所示。如果我启动了我的应用程序的2个实例(说Transaction1和Transaction2),即使它们都选择了相同的记录集,Transaction2也应等待,直到Transaction1提交为止。但事实并非如此。 Transaction2能够更新数据库。
注意:getNotCompletedRecords()和updateStatusToInProgress()方法分别使用JDBCTemplate的query()和batchUpdate()方法。
@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