2008-09-15 10 views
5

Ich bin auf der Suche nach einer allgemeinen Lösung für das Upgrade Datenbankschema mit ORM-Tools, wie JPOX oder Hibernate. Wie machst du das in deinen Projekten?Wie aktualisiert man Datenbankschema, das mit einem ORM-Tool erstellt wurde?

Die erste Lösung, die mir in den Sinn kommt, ist, meinen eigenen Mechanismus für die Aktualisierung von Datenbanken zu erstellen, wobei SQL-Skripte die ganze Arbeit erledigen. Aber in diesem Fall muss ich mich daran erinnern, jedes Mal neue Skripte zu erstellen, wenn die Objektzuordnungen aktualisiert werden. Und ich werde immer noch mit SQL-Abfragen auf niedriger Ebene arbeiten müssen, anstatt nur Zuordnungen zu definieren und den ORM-Tools zu erlauben, alle Aufgaben zu erledigen ...

Die Frage ist also, wie man es richtig macht. Vielleicht ermöglichen einige Tools die Vereinfachung dieser Aufgabe (ich habe beispielsweise gehört, dass Rails einen solchen Mechanismus eingebaut hat), wenn ja, bitte hilf mir zu entscheiden, welches ORM-Tool ich für mein nächstes Java-Projekt auswählen soll.

Antwort

7

LiquiBase ist eine interessante Open-Source-Bibliothek für die Handhabung von Datenbank-Refactorings (Upgrades). Ich habe es nicht benutzt, werde es aber definitiv auf meinem nächsten Projekt versuchen, wo ich ein DB-Schema aktualisieren muss.

0

Am Ende haben wir machen Update-Skripte jedes Mal, wenn wir die Datenbank geändert. Also gibt es ein Skript von Version 10 bis 11, von 11 bis 12 usw. Dann können wir alle aufeinanderfolgenden Skripte ausführen, um von einer bestehenden Version auf die neue Version zu überspringen. Wir haben die vorhandene Version in der Datenbank gespeichert, so dass wir dies beim Start erkennen konnten.

Ja, dies war datenbankspezifischer Code! Eines der Hauptprobleme mit Hibernate!

0

Beim Arbeiten mit Hibernate verwende ich eine Installer-Klasse, die über die Befehlszeile ausgeführt wird und Optionen zum Erstellen eines Datenbankschemas, zum Einfügen von Basisdaten und zum dynamischen Aktualisieren des Datenbankschemas mit SchemaUpdate bietet. Ich finde es sehr nützlich. Es gibt mir auch eine Stelle, um einmalige Skripts zu platzieren, die ausgeführt werden, wenn eine neue Version gestartet wird, um beispielsweise ein neues Feld in einer vorhandenen DB-Tabelle aufzufüllen.

2

Ich sehe nicht, warum ORM-generierte Schemas sich von anderen DB-Schemas unterscheiden - das Problem ist das gleiche. Angenommen, Ihr ORM spuckt ein Generations-Skript aus. Sie können ein externes Tool verwenden, um das diff zu tun. Ich habe es nicht ausprobiert, aber google kam mit SQLCompare als eine Option zurück - ich bin mir sicher, dass es andere gibt.

2

Wir übergeben SQL-Update-Skripte und wir zerlegen das Schema und erstellen es neu, indem wir die Update-Skripte als Teil unseres kontinuierlichen Build-Prozesses anwenden. Wenn irgendwelche Hibernate-Zuordnungen nicht mit dem Schema übereinstimmen, schlägt der Build fehl.