SELCT ... FOR UPDATE
n'a de sens que dans le cadre d'une transaction managée, puisqu'elle nécessite la levée de verrous sur les lignes sélectionnées.
Par défaut, JDBC n'utilise pas de transaction gérée, il en utilise une implicitement créée qui s'engage dès que la requête est exécutée. Cela cassera la sémantique de SELECT ... FOR UPDATE
, et le pilote JDBC se plaint.
Pour utiliser une transaction gérée, ajoutez
connection.setAutoCommit(false);
avant d'exécuter la requête. Ensuite, exécutez connection.commit()
.