Bonjour,
Je cherche la bonne stratégie pour gérer la concurrence d'accès en écriture.
J'ai potentiellement plusieurs applications (dont j'ai la main dessus) qui peuvent accéder a une table en écriture.
Au démarrage de chacune de ces applis, elles font une insertion en base de données avec hibernate. J'ai un generator de clé de type "max" donc il fait un select(max) puis il incrémente cette valeur.
Evidemment il suffit que deux applis fassent le select au même moment pour que cela échoue ensuite lors de l'insertion avec une duplication de clé primaire.
Je ne vois que deux choix actuellement :
- je lock la table avant le select et l'insert (mais je ne sais pas comment le faire avec hibernate)
- je gère l'exception de la contrainte unique et je recommence
je suis sur une appli qui doit tourner sur oracle et sybase en production, et j'utilise mysql et derby en dev donc c'est pourquoi j'ai choisi ce type de generator (max) afin d'avoir une uniformité des comportements. Du coup, pas d'auto increment ou de séquence possible.
Une autre idée ?
je ne peux pas utiliser de séquence ora
Partager