Problem bei der Aktualisierung des Ruhezustandsschemas
-
28-10-2019 - |
Frage
Ich habe meiner persistenten Klasse im Ruhezustand ein Zeichenfolgenfeld hinzugefügt und die Anwendung neu gestartet.Es startete SchemaUpgrade und führte zu mehreren Fehlern wie diesem:
2011-02-03 13:04:06,522 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Unsuccessful: alter table table_name add index FKCD10932052C35B33 (previewExample_id), add constraint FKCD10932052C35B33 foreign key (previewExample_id) references preview (id)
2011-02-03 13:04:06,522 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Can't create table 'dbName.#sql-59c_1cc' (errno: 150)
Die Spalte wurde jedoch zur Datenbank hinzugefügt.Und alles scheint gut zu funktionieren.Abgesehen von diesen Fehlern, die jedes Mal auftreten, starte ich die Anwendung.
Was kann ich tun, um diese Indizes zu erstellen?DB ist MySQL, Hibernate-Version ist 3.0.
Lösung
Es klingt nicht nach einem Problem im Ruhezustand.Wenn Sie versuchen, manuell auszuführen, werden Sie feststellen, dass das gleiche Problem auftritt.Wenn ich mir die MySQL-Handbücher ansehe, sehe ich, dass "errno: 150" bedeutet:
Wenn Sie eine Tabelle neu erstellen, die gelöscht wurde, muss sie eine Definition haben, die den Fremdschlüsseleinschränkungen entspricht, auf die sie verweist.Es muss die richtigen Spaltennamen und -typen haben und Indizes für die Schlüssel, auf die verwiesen wird, wie bereits erwähnt.Wenn diese nicht erfüllt sind, gibt MySQL die Fehlernummer 1005 zurück und verweist auf den Fehler 150 in der Fehlermeldung.
http://dev.mysql.de / doc / refman / 5.5 / de / innodb-fremdschlüsselbeschränkungen.html
Andere Tipps
Stellen Sie außerdem sicher, dass TABLE_COLLATION zwischen der referenzierten und der referenzierten Spalte identisch ist. Andernfalls wird auch dieser Fehler angezeigt.
Für mich wurde das Problem behoben, indem alle Tabellen Engine in InnoDB geändert wurden.
So geht's manuell: