Frage

<property name="hibernate.hbm2ddl.auto">update</property>

Ich kann mein Datenbankschema erstellen, es fügt automatisch Eigenschaften, Einschränkungen, Schlüssel usw. hinzu, aber was ist mit dem Aktualisieren des Datenbankschemas? Wenn ich eine Eigenschaft von meinen Entitäten entferne, entzieht Hibernate es nicht, oder wenn ich einige Einschränkungen ändere, berührt Hibernate keine bereits erstellte Einschränkung ...

Es gibt also eine Möglichkeit, Hibernate das Datenbankschema wirklich zu aktualisieren?

Vielen Dank.

War es hilfreich?

Lösung

Wir haben ein Tool für unser eigenes erstellt, das die erforderlichen Tropfen von Datenbankspalten und -Tabellen erstellt und diese Tropfen dem für Datenbankaktualisierungen generierten SQL hinzugefügt hat. Aber wir mussten der Schemaupdate -Generation einige Extras hinzufügen, um es zum Laufen zu bringen:

  • Wir mussten Schecks für nicht-null-Eigenschaften hinzufügen. Dies beinhaltet die Ausgabe einer Update -Anweisung zu den Daten an eleminate Nulls, sofern möglich, was zum nächsten Punkt der Standardwerte führt.
  • Wir mussten Schecks für Standardwerte von Spalten hinzufügen. Die Standardeinstellungen werden durch die Nullabilität einer Spalte und ihres Datentyps abgeleitet. Primitive werden immer auf Null oder falsche, nicht-null-Aufzüge bis zu seinem ersten Enumswert initialisiert, aber für andere Objekte muss das Skript manuell geändert werden.
  • Wir haben sogar Unterstützung für die Änderung der Varchar -Spalten hinzugefügt, da es Fälle gab, in denen die Datenbankspaltenlänge und die @Column(length) unterschieden.

Aber um alles zusammenzustellen, kann ein vollständiges Tool nicht so erstellt werden, denn was ist, wenn eine Spalte in Code umbenannt wird? Was ist, wenn sich der Typ in einer Weise nicht automatisch konvertierbar ändert (bis heute?). Wenn Sie keinen Zugriff auf eine Refactoring -Geschichte haben, können Sie nicht immer Änderungen ausbreiten.

Andere Tipps

Wir verwenden derzeit Likibase Um automatische Datenbankänderungen auf Datenbank agnostische Weise vorzunehmen. Es kann möglich sein, Liquibase -Befehle direkt aus Ihren Hibernate -Anmerkungen zu extrahieren, aber ich glaube nicht, dass ein solches Tool existiert, sodass Sie es wahrscheinlich selbst tun müssen.

Nein, da ist kein. HBM2DDL ist nicht dazu gedacht, Ihre Schema -Migrationen zu verwalten. Es ist am besten, wenn Sie es nur für additive Änderungen an Ihrem Schema und Handbearbeiten (die generierten Skripte) für alles andere verwenden.

Einige Projekte, die möglicherweise nützlich sein, um Schemaänderungen zu verwalten:

  • mybatis (1049 Fragen mit dem Tag auf Sau)
  • Likibase (663 Fragen, die auf Sau gekennzeichnet sind)
  • Weg fliegen (400 Fragen, die auf Sau markiert sind)

Eine andere Ressource, die Sie nützlich finden können, ist die Feature -Vergleich Auf der Flyway -Website (es werden dort andere verwandte Projekte erwähnt).

Hibernate bietet eine Klasse namens SchemaUpdate, die eine Reihe von Hibernate -Mappings mit einem Datenbankschema synchronisieren kann

Alter Post, aber lassen Sie die Community wissen, ob es gut ist :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top