Ich habe eine Anwendung, wo Hibernate alle meine Tabellenschemata erstellt, wenn die Anwendung zum ersten Mal auf einer Maschine ausgeführt wird. Das funktioniert gut.Kombinieren Hibernate automatische Schema Erstellung und Datenbank Versionierung
Nun habe ich mich gefragt, ob Hibernate einen Mechanismus hat, um die Datenbank unter Versionskontrolle zu halten, dh Hibernate weiß, wie man ein Schema in ein anderes migriert, wenn ich eine andere Version meiner Anwendung ausführe und Hibernate eine andere Datenbank findet Schema von einer älteren Version vorhanden? Ich denke, irgendwie, dass dies möglich sein sollte, wenn man bedenkt, dass Hibernate das bestehende Schema lesen und konnte das Schema der Abbildung Beschreibung vergleichen. Ich würde jedoch nicht wissen, wie ich Hibernate sagen könnte, alte Daten zu migrieren, wie beim Erstellen von Änderungsskripten mit z. Liquibase/Flugweg.
Ich habe vielleicht nicht die richtigen Dinge googled seit Hibernate und Versionierung wird Ihnen eine Menge von Hits auf Auditing und Feldversionierung zeigen, aber ich denke mehr in Bezug auf Liquibase/Flyway Art der Versionierung. Ich hielt nie beide zusammen, aber da Hibernate keine Update-Skripte erstellen, sondern manipuliert direkt auf die Datenbank, würde ich nicht wissen, wie das machen beide zusammen arbeiten.
Dies ist das erste Mal, dass ich Hibernate mein Schema erstellen lassen, anstatt meine eigenen Skripte zu schreiben. Ich tue dies, um den Einsatz von Hibernate Envers zu machen, was die Schaffung zusätzlicher mühsam die manuelle Skripts macht. Vielleicht vermisse ich etwas Offensichtliches. Vielen Dank für Ihre Anregungen!
Update: Ich habe heute mit dem Entwickler von Flyway gesprochen und er sagte mir, dass er keine gute Lösung wissen würde. Vielleicht gibt es nichts?
Hibernate hat einen hbm2ddl.auto Wert von „update“, die dies zu tun versuchen, aber es ist nicht zuverlässig. Nach meiner Erfahrung mit Hibernate sollten diese Schema-Updates immer von manuell geschriebenen Schema-Update-SQL-Skripten behandelt werden.Im Allgemeinen sollte der db-Benutzer, den die App verwendet, keine create/drop-Rechte haben, auch wenn dies in Ihrem Fall nicht zutrifft. – Taylor
Meiner Meinung nach ist das Schema-Schreiben am Ende eine Art Code-Duplizierung, da es ein Domänenmodell widerspiegelt, das bereits durch die Implementierung meiner Java-Objekte beschrieben wurde. Normalerweise ist diese Duplizierung nicht so teuer, aber mit Envers ist es. Deshalb wünschte ich, ich hätte eine Lösung dafür. In welchem Kontext haben Sie das hbm2dll.auto als unzureichend erlebt? Es könnte ein guter Einstiegspunkt für die Implementierung eines benutzerdefinierten Flyway-Migrators sein. –
Fast jeder Kontext. Eine Reorganisation vorhandener Spalten oder andere Änderungen als "Spalte mit einem einzelnen Standardwert hinzufügen" oder "Diese Spalte löschen" können nicht durch den Ruhezustand aktualisiert werden. – Taylor