2017-01-04 4 views
0

Ich habe ID-Spalte mit generierten Strategie AUTO, frage ich mich, warum MySql hibernate_sequence Tabelle generieren? Ich nahm an, dass Hibernate wird IDENTITY-ID-ErzeugungsstrategieHibernate_sequence Tabelle wird generiert

<mapped-superclass class="com.cl.xlp.model.data.Identity"> 
    <attributes> 
     <id name="id"> 
      <column name="id" /> 
      <generated-value strategy="AUTO" /> 
     </id> 
    </attributes> 
</mapped-superclass> 

Hibernate Eigenschaften

hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 
hibernate.hbm2ddl.auto=update 

Mysql Steckerversion

version.mysql.connector>5.1.39</version.mysql.connector> 

Mysql-Server-Version ist 5.6.12

+0

Die Rückfallstrategie für AUTO in Hibernate ist FOLGE, sondern weil MySQL-Sequenzen nicht unterstützt, Hibernate simuliert sie unter Verwendung einer Tabelle. Ändern Sie Ihre Strategie in IDENTITY. – coladict

Antwort

2

holen Wenn Sie strategy="AUTO" generiert Hibernate eine Tabelle namens hibernate_sequence, um die nächste Nummer für die ID Sequenz anzugeben. Möglicherweise haben Sie vergessen, das Feature AutoIncrement zu der PK Ihrer Tabelle hinzuzufügen.

Sie können die Generierungsstrategie strategy="IDENTITY" verwenden, um die in MySql verfügbare Funktion AutoIncrement zu erzwingen und die Erstellung einer Tabelle zu vermeiden.

1

Die Art, wie Hibernate den AUTO-Generierungstyp interpretiert, wurde ab Hibernate Version 5.0 geändert.

Wenn in Frage IDs für die Tabelle zu erzeugen mit Hibernate v 4.0 und Erzeugungsart als AUTO, die speziell für MySql, würde Hibernate wählt die IDENTITY Strategie (und damit nutzt die AUTO_INCREMENT Funktion) für.

Beginnend mit Version 5.0, wenn Generation Type als AUTO gewählt wurde, verwendet Hibernate SequenceStyleGenerator unabhängig von der Datenbank. Im Falle von MySql emuliert Hibernate eine Sequenz anhand einer Tabelle und deshalb sehen Sie die Tabelle hibernate_sequence. MySql unterstützt den Standardsequenztyp nicht nativ.

Referenzen

Verwandte Themen