Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Bloqueando uma tabela com hibernação


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)