Você precisa usar o bloqueio pessimista, que pode ser alcançado por
setLockMode(String alias, LockMode lockMode)
na consulta e use
LockMode.UPGRADE
. Consulte Query.setLockMode
No entanto, isso certamente matará a escalabilidade e o desempenho se você estiver fazendo muito acesso nesta tabela. É melhor usar uma sequência ou outra estratégia é criar um serviço para alocar números (por exemplo, um SSB) que pega 100 números por vez, atualiza o banco de dados e os distribui. Isso economiza 198 acessos ao banco de dados.
ATUALIZAR:
Você também terá que modificar um pouco o design da sua mesa. É melhor ter uma única linha com um ID conhecido e armazenar o número que você está incrementando em outra coluna. Em seguida, você deve atualizar a linha em vez de excluir a linha antiga e adicionar uma nova. Caso contrário, a estratégia de bloqueio de linha não funcionará.
ATUALIZAÇÃO2:
O OP descobriu que o seguinte funcionou:
session.get(class.Class, id, lockOption)