Ich habe ein viel verwendetes Projekt, das ich gerade aktualisiere. Es gibt mehrere Stellen, an denen dieses Projekt installiert werden kann, und in der Zukunft ist es nicht sicher, welche Version wo verwendet wird und auf welche Version man in der Zukunft aktualisiert werden könnte. Im Moment sind sie alle gleich.HSQL erstellen Tabellenabfrage erstellen aus Klasse
Mein Problem rührt von der Tatsache her, dass es viele Änderungen an den Hibernate-Entity-Klassen geben kann, und es muss einfach und ohne Datenbankverlust auf eine neuere Version aktualisiert werden können. Einfach WAR ersetzen und starten und es sollte sich migrieren.
Hibernate macht keine Änderungen an Tabellen, es sei denn hibernate.hbm2ddl.auto = erstellen, aber die tatsächlich alle Daten wegwirft?
Jetzt, wenn der Spring-Kontext vollständig geladen ist, führt er eine Bean aus, die die Datenbank auf die aktuelle Version migriert, indem sie alle Änderungen von VersionX zu VersionY durchläuft (welche Version zuvor in der Datenbank gespeichert wurde) und ändern Sie die Tabelle manuell.
Es ist nicht viel Aufwand ein paar hartcodierte ALTER TABLE einige Spalten hinzufügen zu tun, aber wenn es um das Hinzufügen komplett neue Tabellen kommt, fühlt es dumm, alles zu schreiben zu haben ...
Also meine Frage (n) ist diese:
gibt es eine Möglichkeit, um eine Entity-Klasse und einen Dialekt zu schicken irgendwo Code Hibernate, und erhalten Sie eine gültige SQL-Abfrage zum Erstellen einer Tabelle zurück?
Und noch besser, irgendwie erstellen Sie eine SQL-Zeichenfolge zum Hinzufügen einer Spalte zu einer Tabelle, Dialekt-Safe?
Ich hoffe, dass dies nicht eine dumme Frage ist, und ich habe nicht etwas offensichtlich verpasst, wenn es um Hibernate kommt ...
Okay, ich entschied mich für das ist die bessere Antwort. Ich habe immer noch Vorbehalte, um mich selbst als Abhängigkeit abzuhängen oder meine Spring + Hibernate + Annotations anzupassen, aber es hat eine großartige Arbeit geleistet, hartcodierte SQL-Abfragen zu erstellen, die ich für meine eigene, benutzerdefinierte Lösung verwenden kann. Vielen Dank. – Stmated
Überprüfen Sie diese Antwort von Dipesh: http://stackoverflow.com/a/12259980/433789 – sdouglass
Lassen Sie Hibernate seine eigene automatische Aktualisierung funktioniert gut in einfachen Fällen wie das Hinzufügen neuer Nullable-Spalten, aber es wird nicht komplizierter bewältigen Migrationen wie das Umbenennen oder Entfernen von Spalten, Ändern von Typen usw. Stellen Sie sich eine Situation vor, in der Sie eine neue Spalte hinzufügen, deren Wert basierend auf Werten in vorhandenen Spalten berechnet werden muss (anstatt nur einen statischen Standardwert für alle vorhandenen Zeilen zu haben)). –