SELCT ... FOR UPDATE
solo tiene sentido en el contexto de una transacción administrada, ya que requiere que se eliminen los bloqueos en las filas seleccionadas.
De manera predeterminada, JDBC no usa una transacción administrada, usa una creada implícitamente que se confirma tan pronto como se ejecuta la consulta. Esto romperá la semántica de SELECT ... FOR UPDATE
y el controlador JDBC se queja.
Para usar una transacción administrada, agregue
connection.setAutoCommit(false);
antes de ejecutar la consulta. Luego, ejecute connection.commit()
.