Musisz użyć pesymistycznego blokowania, które można osiągnąć za pomocą
setLockMode(String alias, LockMode lockMode)
w zapytaniu i użyj LockMode.UPGRADE
.
Zobacz Query.setLockMode
Jednak z pewnością zabije to skalowalność i wydajność, jeśli robisz dużo dostępu do tej tabeli. Lepiej albo używając sekwencji, albo innej strategii jest stworzenie usługi przydzielania numerów (np. SSB), która pobiera 100 numerów na raz, aktualizuje bazę danych i rozdaje je. To oszczędza 198 dostępów do bazy danych.
AKTUALIZACJA:
Będziesz także musiał nieznacznie zmodyfikować projekt stołu. Lepiej jest mieć jeden wiersz ze znanym identyfikatorem i przechowywać liczbę, którą zwiększasz, w innej kolumnie. Następnie należy zaktualizować wiersz, zamiast usuwać stary wiersz i dodawać nowy. W przeciwnym razie strategia blokowania wierszy nie zadziała.
AKTUALIZACJA2:
OP stwierdził, że działają następujące elementy:
session.get(class.Class, id, lockOption)