Frage Hibernate hbm2ddl.auto mögliche Werte und was sie tun?


Ich möchte wirklich mehr über das Update, den Export und die möglichen Werte erfahren hibernate.hbm2ddl.auto
Ich muss wissen, wann das Update zu verwenden ist und wann nicht? Und was ist die Alternative?

Das sind Änderungen, die über DB passieren können:

  • neue Tabellen
  • neue Spalten in alten Tabellen
  • Spalten gelöscht
  • Datentyp einer Spalte geändert
  • Ein Typ einer Spalte hat seine Attribute geändert
  • Tabellen fallen
  • Werte einer Spalte geändert

Was ist jeweils die beste Lösung?


900
2018-01-13 06:40


Ursprung


Antworten:


Von dem Community-Dokumentation:

hibernate.hbm2ddl.auto Prüft oder exportiert die Schema-DDL automatisch in die Datenbank, wenn die SessionFactory erstellt wird. Mit create-drop wird das Datenbankschema gelöscht, wenn die SessionFactory explizit geschlossen wird.

z.B. validieren | aktualisieren | erstellen | create-drop

Also die Liste der möglichen Optionen sind,

  • bestätigen: validiert das Schema und nimmt keine Änderungen an der Datenbank vor.
  • aktualisieren: Aktualisieren Sie das Schema.
  • erstellen: Erzeugt das Schema und zerstört vorherige Daten.
  • create-drop: Löschen Sie das Schema, wenn die SessionFactory explizit geschlossen wird, normalerweise wenn die Anwendung beendet wird.

Diese Optionen scheinen Entwicklerwerkzeuge zu sein und keine Datenbanken auf Produktionsebene zu erleichtern. Vielleicht möchten Sie sich die folgende Frage ansehen; Hibernate: hbm2ddl.auto = Update in der Produktion?


919
2017-11-06 19:25



Es gibt auch den undokumentierten Wert von "none", um es vollständig zu deaktivieren.


161
2018-06-08 14:52



Die Konfigurationseigenschaft wird aufgerufen hibernate.hbm2ddl.auto

In unserer Entwicklungsumgebung setzen wir hibernate.hbm2ddl.auto=create-drop Löschen und Erstellen einer sauberen Datenbank bei jeder Bereitstellung, sodass sich unsere Datenbank in einem bekannten Status befindet.

Theoretisch können Sie festlegen hibernate.hbm2ddl.auto=update Aktualisieren Sie Ihre Datenbank mit Änderungen an Ihrem Modell, aber ich würde das in einer Produktionsdatenbank nicht vertrauen. Eine frühere Version der Dokumentation sagte, dass dies zumindest experimentell war; Ich kenne den aktuellen Status nicht.

Setzen Sie daher für unsere Produktionsdatenbank keine Einstellungen hibernate.hbm2ddl.auto - Standardmäßig werden keine Datenbankänderungen vorgenommen. Stattdessen erstellen wir manuell ein SQL-DDL-Update-Skript, das Änderungen von einer Version zur nächsten anwendet.


141
2018-01-13 08:11



ich würde ... benutzen Liquibase zum Aktualisieren Ihrer Datenbank. Hibernate's Schema-Update-Funktion ist wirklich nur o.k. für einen Entwickler, während sie neue Funktionen entwickeln. In einer Produktionssituation muss das DB-Upgrade sorgfältiger gehandhabt werden.


50
2018-03-23 07:40



Obwohl es ein ziemlich alter Post ist, aber da ich etwas über das Thema recherchiert habe, dachte ich daran, es zu teilen.

hibernate.hbm2ddl.auto

Gemäß der Dokumentation kann es vier gültige Werte haben:

erstellen | aktualisieren | validieren | create-drop

Im Folgenden wird das Verhalten erläutert, das von diesen Werten angezeigt wird:

  • erstellen : - Erstellen Sie das Schema, die zuvor vorhandenen Daten (falls vorhanden) im Schema sind verloren
  • update: - Aktualisieren Sie das Schema mit den angegebenen Werten.
  • validate: - validiere das Schema. Es ändert sich in der DB nicht.
  • create-drop: - Erzeuge das Schema mit der Zerstörung der zuvor vorhandenen Daten (falls vorhanden). Es löscht auch das Datenbankschema, wenn die SessionFactory geschlossen wird.

Nachfolgend sind die wichtigen Punkte aufgeführt, die es zu beachten gilt:

  • Im Falle von aktualisierenWenn das Schema nicht in der Datenbank vorhanden ist, wird das Schema erstellt.
  • Im Falle von bestätigen, wenn das Schema in der Datenbank nicht existiert, wird es nicht erstellt. Stattdessen wird es einen Fehler werfen: - Table not found:<table name>
  • Im Falle von create-dropDas Schema wird beim Schließen der Sitzung nicht gelöscht. Es fällt nur beim Schließen der SessionFactory.
  • Für den Fall, dass ich dieser Eigenschaft irgendeinen Wert gebe (sage abc anstelle der oben genannten vier Werte) oder lasse sie einfach leer. Es zeigt folgendes Verhalten:

    - Wenn das Schema nicht in der Datenbank vorhanden ist: - Es erstellt das Schema

    -Ist ein Schema in der DB vorhanden: - aktualisieren das Schema.


26
2017-08-07 14:11



hibernate.hbm2ddl.auto automatisch validiert und exportiert DDL in das Schema, wenn die sessionFactory erstellt wird.

Standardmäßig wird keine automatische Erstellung oder Änderung in der Datenbank durchgeführt. Wenn der Benutzer einen der folgenden Werte einstellt, führt er automatisch DDL-Schemaänderungen durch.

  • create - Erstelle ein Schema

    <entry key="hibernate.hbm2ddl.auto" value="create">
    
  • update - Aktualisieren des vorhandenen Schemas

    <entry key="hibernate.hbm2ddl.auto" value="update">
    
  • validiere - validiere existierendes Schema

    <entry key="hibernate.hbm2ddl.auto" value="validate">
    
  • create-drop - erstellt und löscht das Schema automatisch, wenn eine Sitzung gestartet und beendet wird

    <entry key="hibernate.hbm2ddl.auto" value="create-drop">
    

19
2018-05-11 17:26



Ich widmete a Blogeintrag für die häufigsten Hibernate DDL-Generierungsstrategien:

  1. Das hibernate.hbm2ddl.auto="update" ist praktisch, aber weniger flexibel, wenn Sie Funktionen hinzufügen oder benutzerdefinierte Skripts ausführen möchten.
  2. Das flexibelster Ansatz ist zu benutzen Weg fliegen.

Auch wenn Sie Flyway verwenden, können Sie dennoch das erste Migrationsskript mithilfe von hbm2ddl generieren. Im Dieser Artikelkönnen Sie sehen, wie Sie das JPA Entity Model mit dem jOOQ Table Model kombinieren können.


16
2018-05-15 12:46



Wenn Sie keine Strings in Ihrer App verwenden möchten und nach vordefinierten Konstanten suchen, werfen Sie einen Blick darauf org.hibernate.cfg.AvailableSettings Klasse, die im Hibernate JAR enthalten ist, wo Sie eine Konstante für alle möglichen Einstellungen finden. In Ihrem Fall zum Beispiel:

/**
 * Auto export/update schema using hbm2ddl tool. Valid values are <tt>update</tt>,
 * <tt>create</tt>, <tt>create-drop</tt> and <tt>validate</tt>.
 */
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";

15
2018-02-10 09:56