Ich habe versucht, den Ruhezustand in meinem Projekt mit der Frühlingsversion von 4 auf 5 zu aktualisieren 4.2
. Nach diesem Upgrade habe ich den folgenden Fehler in meinem Stack-Trace gefunden, als ich eine Methode zum Aktualisieren aufgerufen habe.
10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
Ich habe die automatisch inkrementierte ID mit Anmerkungen geändert
@GeneratedValue(strategy=GenerationType.AUTO)
Trotzdem bleibt der Fehler bestehen.
Antworten:
Sie können auch setzen:
Lassen Sie die DateBase die Inkrementierung des Primärschlüssels verwalten:
quelle
INSERT
wird einen zusätzlichen Roundtrip zur Datenbank verursachen, um die ID abzurufen. Also, wenn dieser Nachteil akzeptabel ist, gut.Sie müssen für Hibernate5.x einstellen
<property name="hibernate.id.new_generator_mappings">false</property>
.. siehe und verlinken .Für ältere Versionen von Hibernate 4.x:
<prop key="hibernate.id.new_generator_mappings">false</prop>
quelle
Arbeiten mit Spring Boot
Lösung
Fügen Sie die folgende Zeichenfolge in .application.properties ein
Erläuterung
In Hibernate 4.X ist dieses Attribut standardmäßig
true
.quelle
Dies ist der Grund für diesen Fehler:
Es wird untersucht, wie die von Ihnen verwendete Datenbank IDs generiert. Für MySQL oder HSQSL gibt es Inkrementfelder, die automatisch inkrementiert werden. In Postgres oder Oracle verwenden sie Sequenztabellen. Da Sie keinen Sequenztabellennamen angegeben haben, wird nach einer Sequenztabelle mit dem Namen hibernate_sequence gesucht und standardmäßig verwendet. Sie haben also wahrscheinlich keine solche Sequenztabelle in Ihrer Datenbank und jetzt erhalten Sie diesen Fehler.
quelle
Ich habe den gleichen Fehler erhalten "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Tabelle 'mylocaldb.hibernate_sequence' existiert nicht".
Unter Verwendung von Spring MVC 4.3.7 und Hibernate Version 5.2.9 erfolgt die Anwendung mithilfe der Spring Java-basierten Konfiguration. Jetzt muss ich die
hibernate.id.new_generator_mappings
von @Eva Mariam erwähnte Eigenschaft wie folgt in meinen Code einfügen:Und es funktionierte wie Charme.
quelle
Zu Ihrer Information
Wenn Sie hbm-Dateien verwenden, um die O / R-Zuordnung zu definieren.
Beachte das:
In Hibernate 5 wurde der Parametername für den Sequenznamen geändert .
Die folgende Einstellung hat in Hibernate 4 einwandfrei funktioniert :
In Hibernate 5 verursacht dieselbe Zuordnungseinstellungsdatei jedoch den Fehler "hibernate_sequence existiert nicht".
Um diesen Fehler zu beheben, muss der Parametername geändert werden in:
Dieses Problem hat mich 2, 3 Stunden verschwendet.
Und irgendwie sieht es so aus, als gäbe es kein Dokument darüber.
Ich muss den Quellcode von org.hibernate.id.enhanced.SequenceStyleGenerator lesen, um es herauszufinden
quelle
Wenn Sie verwenden
@GeneratedValue(strategy=GenerationType.AUTO)
oder
@GeneratedValue
Hibernate beginnt, die beste Generierungsstrategie für Sie zu bestimmen, in diesem Fall hat sie ausgewähltGenerationType.SEQUENCE
als Strategie und deshalb sucht esschemaName.hibernate_sequence
Dies ist eine Tabelle für die sequenzbasierte ID-Generierung.Wenn Sie
GenerationType.SEQUENCE
als Strategie verwenden, müssen Sie@TableGenerator
Folgendes bereitstellen .Wenn Sie die Strategie festlegen, ist es das zu
@GeneratedValue(strategy = GenerationType.IDENTITY)
.Das ursprüngliche Problem wurde behoben, da Hibernate dann nicht mehr nach Sequenztabellen sucht.
quelle
Nur für den Fall, dass sich jemand mit diesem Problem die Haare ausreißt, wie ich es heute getan habe, konnte ich diesen Fehler nicht beheben, bis ich mich geändert habe
zu
quelle
In Hibernate 5.x sollten Sie set hibernate.id.new_generator_mappings in hibernate.cfg.xml zu false hinzufügen
quelle
Sie können auch setzen:
Lassen Sie die DateBase die Inkrementierung des Primärschlüssels verwalten:
Die obige Antwort hat mir geholfen.
quelle
Wenn Sie die Hibernate-Version vor Hibernate5 verwenden,
@GeneratedValue(strategy = GenerationType.IDENTITY)
funktioniert dies wie ein Zauber. Nach Hibernate5 ist jedoch die folgende Korrektur erforderlich.DDL
GRUND
Auszug aus dem Ruhezustand
quelle
Dies kann durch HHH-10876 verursacht werden, das behoben wurde. Aktualisieren Sie daher auf:
quelle
Hibernate 5.2.17.Final
als Implementierung verwendet wird. Ich bekomme immer noch dieses Problem, wenn esGenerationType
istAUTO
.Ich habe Hibernate-Sequenz in Postgres hinzugefügt. Führen Sie diese Abfrage im PostGres-Editor aus:
Ich werde die Vor- und Nachteile der Verwendung der Abfrage herausfinden, aber für jemanden, der Hilfe benötigt, kann dies verwendet werden.
quelle
In meinem Fall wurde das Problem behoben , indem alle Anmerkungen
GenerationType.AUTO
durch ersetzt wurdenGenerationType.SEQUENCE
.quelle
Führen Sie diese Abfrage aus
quelle