J'ai une colonne id avec la stratégie générée AUTO, je me demande pourquoi MySql génère une table hibernate_sequence? Je supposais qu'hibernate choisirait la stratégie de génération d'ID IDENTITY
<mapped-superclass class="com.cl.xlp.model.data.Identity">
<attributes>
<id name="id">
<column name="id" />
<generated-value strategy="AUTO" />
</id>
</attributes>
</mapped-superclass>
Propriétés d'hibernation
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
Version du connecteur Mysql
version.mysql.connector>5.1.39</version.mysql.connector>
La version du serveur Mysql est 5.6.12
La façon dont Hibernate interprète le type de génération AUTO a changé depuis Hibernate version 5.0.
Lors de l'utilisation d'Hibernate v 4.0 et du type de génération en tant que AUTO
, spécifiquement pour MySql, Hibernate choisirait la stratégie IDENTITY
(et utiliserait donc la AUTO_INCREMENT
fonctionnalité) pour générer des ID pour la table en question.
À partir de la version 5.0 lorsque le type de génération est sélectionné sur AUTO, Hibernate utilise SequenceStyleGenerator
quelle que soit la base de données. Dans le cas de MySql Hibernate émule une séquence à l'aide d'une table et c'est pourquoi vous voyez la table hibernate_sequence. MySql ne prend pas en charge nativement le type de séquence standard.
Les références
Si tu utilises strategy="AUTO"
, Hibernate va générer une table appelée hibernate_sequence
pour fournir le numéro suivant de la séquence ID
. Vous avez peut-être oublié d'ajouter la fonction AutoIncrement
au PK de votre table.
Vous pouvez utiliser la stratégie de génération strategy="IDENTITY"
pour appliquer en utilisant la fonction AutoIncrement
disponible dans MySql et éviter de créer une table.