"Selecionar ... para atualização" é suportado no Hibernate via LockMode.UPGRADE que você pode definir, por exemplo, um NamedQuery .
Mas usar o bloqueio de linha de tabela de aplicativo/manual tem várias desvantagens (especialmente quando uma conexão de banco de dados é quebrada no meio de uma transação) e seu procedimento de atualização pode ficar sem isso:
- Iniciar transação.
- update table set state='PENDING', server_id=1 where state='IN PROGRESS';
- Confirmar transação
- selecione na tabela onde state='PENDING' e server_id=1;
- [registros de processo]
Cada servidor deve ter um número exclusivo para que isso funcione, mas será menos propenso a erros e você deixará o DBMS fazer o que deve ser bom:isolamento (consulte ÁCIDO ).