Quelle est la meilleure pratique pour définir des index de table pour les entités supportant le verrouillage optimiste? Il est certain que l'identifiant d'entité doit faire partie d'un index dans la base de données pour permettre des recherches rapides par id.Table index/pk pour le verrouillage optimiste dans JPA
Qu'en est-il de la colonne version? Est-ce logique de le faire partie d'un index? Que se passe-t-il si nous ne définissons pas la clé primaire DB, mais que nous créons un index composé de l'identifiant de l'entité + la colonne de la version?
Risque d'avoir deux lignes en DB avec le même identifiant d'entité? Dites deux transactions persistent deux entités avec le même id d'entité en parallèle?
Votre question serpente un peu et me demande quel problème vous essayez vraiment de résoudre. Mais quel que soit le problème, la suppression des clés primaires devrait certainement *** PAS *** sur votre liste de solutions possibles. – Perception
Ma principale préoccupation est de savoir si le fait de ne pas avoir de clé primaire DB correspondant à l'identifiant de l'entité peut faire du tort lorsque le verrouillage optimiste est utilisé. Je pense que la réponse est oui. Say, deux threads tentent de conserver l'entité avec le même identifiant d'entité en parallèle. Même si elles exécutent find(), les deux peuvent ne pas trouver d'entrée dans db correspondant à l'identifiant d'entité et les deux vont essayer d'insérer des données dans DB. PK se serait gardé contre ce scénario. Par conséquent, c'est obligatoire. –
Ainsi, vous exécutez des insertions simultanées dans la base de données avec des clés primaires potentiellement conflictuelles? Vous devriez probablement redéfinir votre générateur de clé ou utiliser un identifiant auto-incrémenté. Dans tous les cas, votre base de données sérialisera les insertions et après que la première transaction réussie sera validée, toutes les suivantes avec le même identifiant échoueront. – Perception