SELCT ... FOR UPDATE
chỉ có ý nghĩa trong ngữ cảnh của một giao dịch được quản lý, vì nó yêu cầu các khóa được lấy ra trên các hàng đã chọn.
Theo mặc định, JDBC không sử dụng một giao dịch được quản lý, nó sử dụng một giao dịch được tạo ngầm định cam kết ngay sau khi truy vấn được thực thi. Điều này sẽ phá vỡ ngữ nghĩa của SELECT ... FOR UPDATE
và trình điều khiển JDBC phàn nàn.
Để sử dụng giao dịch được quản lý, hãy thêm
connection.setAutoCommit(false);
trước khi bạn thực hiện truy vấn. Sau đó, thực thi connection.commit()
.