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

L'élément initialValue de @TableGenerator n'est-il pas pris en charge dans Hibernate JPA ?

La première valeur étant 1 au lieu de 1001, c'est le bogue Hibernate HHH-4228 , avec le statut Ne résoudra pas . La première valeur correcte dans votre cas est 1001 au lieu de 1000, car initialValue initialise la colonne qui stocke dernier valeur renvoyée (et non la prochaine valeur à renvoyer).

L'utilisation de ce qui suit dans persistence.xml (comme également suggéré dans le rapport de bogue) résoudra le problème avec la première valeur :

<property name="hibernate.id.new_generator_mappings" value="true"/>

Signification de allocationSize est probablement mal compris en question. Ce n'est pas une étape à incrémenter. Cela signifie combien de valeurs sont allouées avec une requête de base de données à partir de la table. Il s'agit plutôt d'une optimisation pour éviter une requête supplémentaire à chaque fois que la valeur de l'identifiant est nécessaire pour une nouvelle entité.

Coté produit c'est que le redémarrage de l'application provoque souvent des trous dans la séquence :

  1. initialValue =1000,allocationSize =100
  2. Utilisez la valeur 1001 (=> la valeur dans valueColumn est mise à jour à 1100).
  3. fermer et démarrer l'application
  4. la valeur suivante sera 1101, pas 1002.