J'ai défini l'artisteId dans le code suivant :
@Id @SequenceGenerator( name = "artist_sequence", sequenceName = "artist_sequence", allocationSize = 1 ) @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "artist_sequence" ) private Long artistId;
Quelqu'un peut-il m'expliquer pourquoi mon ArtistId saute parfois des valeurs et devient déréglé ? J'ai remarqué que même si j'essaie d'insérer des données invalides dans la table (lorsque l'exception est levée), les données seront rejetées par l'entrée de la table, mais mon artisteId sera renseigné de manière invisible. Cela laisse ma table dans l'état suivant :
id_artiste | Nom | Nom de famille |
---|---|---|
1 | Marshall | Mères |
3 | Tupac | Shakur |
Comme je l'ai dit, ma valeur ArtistId de 2 est ignorée car j'essaie d'insérer un artiste déjà existant, mais je l'ai défini pour qu'il soit unique. Ainsi, l'exception est levée, les données sont rejetées, mais mon identifiant avec la valeur 2 est en quelque sorte rempli (ou ignoré). Pouvez-vous m'aider, comment puis-je résoudre ce problème pour éviter cette situation ?
On dirait que vous utilisez une base de données Oracle. L'ID est généré avant l'insertion, donc si l'insertion échoue, l'ID est perdu. De plus, lors de l'utilisation de clusters de serveurs, des plages d'ID sont attribuées à chaque serveur et peuvent varier considérablement entre les insertions consécutives. La réponse courte est que vous ne pouvez pas compter sur la contiguïté des identifiants et sans valeurs manquantes. Cela fonctionnera très probablement pour d'autres bases de données.
C'est un comportement presque normal.
La seule responsabilité d'un générateur de séquences est de générer différentes valeurs entières, rien de plus.