SELCT ... FOR UPDATE
選択した行でロックを解除する必要があるため、マネージドトランザクションのコンテキストでのみ意味があります。
デフォルトでは、JDBCはマネージドトランザクションを使用せず、クエリが実行されるとすぐにコミットする暗黙的に作成されたトランザクションを使用します。これにより、SELECT ... FOR UPDATE
のセマンティクスが壊れます。 、およびJDBCドライバーが文句を言います。
マネージドトランザクションを使用するには、
を追加しますconnection.setAutoCommit(false);
クエリを実行する前に。その後、connection.commit()
を実行します 。