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 :
- initialValue =1000,allocationSize =100
- Utilisez la valeur 1001 (=> la valeur dans valueColumn est mise à jour à 1100).
- fermer et démarrer l'application
- la valeur suivante sera 1101, pas 1002.