È necessario utilizzare il blocco pessimistico, che può essere ottenuto tramite
setLockMode(String alias, LockMode lockMode)
sulla query e utilizzare LockMode.UPGRADE
.
Vedi Query.setLockMode
Tuttavia, questo ucciderà sicuramente la scalabilità e le prestazioni se si accede molto a questa tabella. È meglio usare una sequenza o un'altra strategia consiste nel creare un servizio per allocare i numeri (ad esempio, un SSB) che raccolga 100 numeri alla volta, aggiorni il database e li distribuisca. Ciò ti fa risparmiare 198 accessi al database.
AGGIORNAMENTO:
Dovrai anche modificare leggermente il design del tuo tavolo. È meglio avere una singola riga con un ID noto e memorizzare il numero che stai incrementando in un'altra colonna. Quindi dovresti aggiornare la riga anziché eliminare la vecchia riga e aggiungerne una nuova. In caso contrario, la strategia di blocco delle righe non funzionerà.
AGGIORNAMENTO2:
OP ha riscontrato che quanto segue ha funzionato:
session.get(class.Class, id, lockOption)