"Välj ... för uppdatering" stöds i Hibernate via LockMode.UPGRADE som du kan ställa in till exempel i en NamedQuery .
Men att använda applikation/manuell tabellradslåsning har flera nackdelar (särskilt när en databasanslutning bryts halvvägs i en transaktion) och din uppdateringsprocedur kan klara sig utan den:
- Starta transaktionen.
- uppdatera tabelluppsättning state='PENDING', server_id=1 där state='IN PROGRESS';
- Bekräfta transaktion
- välj från tabellen där state='PENDING' och server_id=1;
- [processposter]
Varje server måste ha ett unikt nummer för att detta ska fungera, men det kommer att vara mindre felbenäget och du låter DBMS göra vad den ska vara bra på:isolering (se ACID ).