"Seleccionar... para actualizar" es compatible con Hibernate a través de Modo de bloqueo.UPGRADE que puede configurar, por ejemplo, un NamedQuery .
Pero el uso de bloqueo de fila de tabla manual/aplicación tiene varios inconvenientes (especialmente cuando una conexión de base de datos se interrumpe a la mitad de una transacción) y su procedimiento de actualización puede prescindir de él:
- Iniciar transacción.
- actualizar conjunto de tablas state='PENDING', server_id=1 where state='IN PROGRESS';
- Confirmar transacción
- seleccione de la tabla donde state='PENDING' and server_id=1;
- [registros de proceso]
Cada servidor debe tener un número único para que esto funcione, pero será menos propenso a errores y dejará que el DBMS haga lo que se supone que debe hacer:aislamiento (consulte ACID ).