Ich habe ein viel genutztes Projekt, an dem ich gerade arbeite und das ich aktualisiere. Es gibt mehrere Stellen, an denen dieses Projekt installiert werden kann, und es ist nicht sicher, welche Version wo verwendet wird und auf welche Version man in der Zukunft aktualisiert werden könnte. Im Moment sind sie aber alle gleich.
Mein Problem rührt daher, dass es viele Änderungen an den Hibernate-Entity-Klassen geben könnte, und es muss einfach sein, auf eine neuere Version zu aktualisieren, ohne Probleme und ohne Verlust von Datenbankinhalten. Ersetzen Sie einfach WAR und starten Sie und es sollte sich selbst migrieren.
Meines Wissens ändert Hibernate keine Tabellen, es sei denn hibernate.hbm2ddl.auto=create die aber eigentlich alle Daten wegwirft?
Wenn der Spring-Kontext vollständig geladen ist, wird eine Bean ausgeführt, die die Datenbank auf die aktuelle Version migriert, indem sie alle Änderungen von VersionX zu VersionY durchgeht (die vorherige Version wird in der Datenbank gespeichert) und die Tabelle manuell ändert.
Es ist kein großes Problem, ein paar hart kodierte ALTER TABLE zu machen, um ein paar Spalten hinzuzufügen, aber wenn es darum geht, komplette neue Tabellen hinzuzufügen, fühlt es sich albern an, das alles schreiben zu müssen...
Meine Frage(n) ist/sind also folgende :
-
Gibt es eine Möglichkeit, eine Entitätsklasse und einen Dialekt an Hibernate zu senden Code zu senden und eine gültige SQL-Abfrage zur Erstellung einer Tabelle zurückzubekommen?
-
Noch besser wäre es, einen SQL-String für das Hinzufügen einer Spalte zu einer Tabelle zu erstellen, der dialektsicher ist.
Ich hoffe, dies ist keine dumme Frage und ich habe nicht etwas Offensichtliches übersehen, wenn es um Hibernate geht...