web-dev-qa-db-fra.com

La table Hibernate_sequence est générée

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

9
Vitalii Kravchenko

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

28
Kamalesh Patil

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.

10
Poly