Mysql
 sql >> Base de données >  >> RDS >> Mysql

Verrouiller une table avec hibernation

Vous devez utiliser un verrouillage pessimiste, qui peut être réalisé par

setLockMode(String alias, LockMode lockMode) 

sur la requête et utilisez LockMode.UPGRADE .

Voir Query.setLockMode

Cependant, cela va certainement tuer l'évolutivité et les performances si vous faites beaucoup d'accès sur cette table. Vous feriez mieux d'utiliser une séquence ou une autre stratégie consiste à créer un service pour allouer des numéros (par exemple, un SSB) qui récupère 100 numéros à la fois, met à jour la base de données et les distribue. Cela vous évite 198 accès à la base de données.

MISE À JOUR :

Vous devrez également modifier légèrement la conception de votre table. Il est préférable d'avoir une seule ligne avec un ID connu et de stocker le nombre que vous incrémentez dans une autre colonne. Ensuite, vous devez mettre à jour la ligne plutôt que de supprimer l'ancienne ligne et d'en ajouter une nouvelle. Sinon, la stratégie de verrouillage de ligne ne fonctionnera pas.

MISE À JOUR 2 :

OP a constaté que les éléments suivants fonctionnaient :

session.get(class.Class, id, lockOption)