Bei der Bereitstellung von Anwendungen verwende ich häufig die Kapazität von Hibernate, um ein Datenbankschema zu erstellen, um die Bereitstellung zu vereinfachen. Dies kann leicht durch Konfigurieren der Eigenschaft hibernate.hbm2ddl.auto erreicht werden.
Gelegentlich muss ich jedoch auch einige Anfangsdaten in die Datenbank einfügen, z. B. Root-Benutzer. Gibt es eine Möglichkeit, dies über den Ruhezustand mit einer Art Textdatei zu erreichen?
Ich weiß, dass ich den Code, der dies tun wird, leicht programmieren kann, aber ich frage mich nur, ob es bereits ein Dienstprogramm gibt, das mir helfen kann, dasselbe über die Konfiguration zu erreichen.
Das Hinzufügen von import.sql zum Klassenpfad funktioniert hervorragend. Hbm2ddl prüft, ob die Datei vorhanden ist, und führt sie aus. Das einzige zusätzliche Detail ist, dass sich jeder SQL-Befehl in einer eigenen Zeile befinden muss, da er sonst nicht ausgeführt werden kann.
Dies wird auch nur funktionieren , wenn
hbm2ddl.auto
festgelegt istcreate
odercreate-drop
.quelle
<property name="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</property>
zu Ihremhibernate.cfg.xml
( stackoverflow.com/a/15090964 )Fügen Sie in Ihrer Ruhezustandskonfiguration die Eigenschaft hibernate.hbm2ddl.import_files hinzu . Ändern Sie die zu erstellende Eigenschaft hibernate.hbm2ddl.auto. Fügen Sie initial_data.sql im Verzeichnis / classes mit dem anfänglichen SQL-Code hinzu, um Daten einzufügen. Führen Sie den Ruhezustand aus, nachdem Sie das Datenbankschema erstellt haben.
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.hbm2ddl.auto">create</prop> <prop key="hibernate.hbm2ddl.import_files">initial_data.sql</prop> </props> </property> </bean>
Wenn Sie in Ihrer Konfiguration für den Ruhezustand keine Eigenschaft hinzufügen möchten, können Sie eine Datei import.sql im Verzeichnis / classes erstellen. Im Ruhezustand wird diese standardmäßig verwendet, wenn die Eigenschaft hibernate.hbm2ddl.auto gleich create ist
quelle
Warum
hbm2ddl.auto
undhbm2ddl.import_files
Eigenschaften sind böse(Bei Missbrauch als Tool für das Datenbankänderungsmanagement)
Wie bereits an anderer Stelle erwähnt, weist die Verwendung
hibernate.hbm2ddl.auto
undhibernate.hbm2ddl.import_files
Verwaltung von Datenbankänderungen einige schwerwiegende Nachteile auf:Ich persönlich verwende liquibase für das Datenbankänderungsmanagement und habe den folgenden Workflow entwickelt, um die Wartungsarbeiten zu reduzieren:
Selbst bei komplizierten Änderungen, bei denen eine benutzerdefinierte Änderung implementiert werden muss , kann dies in wenigen Stunden erreicht werden, einschließlich der Definition von Rollbacks, Tests und Dokumentation. Für triviale Änderungen ist es eine Frage von Minuten. Grundsätzlich gilt: Sie müssen etwas mehr Arbeit leisten (ich habe in weniger als einem Tag benutzerdefinierte Änderungssätze für 4 Datenbankkonfigurationen erstellt), aber Sie können sicher sein, dass Sie alles getan haben, um die Datenbank in einem konsistenten Zustand zu halten.
quelle
hbm2ddl
ist es für die meisten Menschen ein vollkommen adäquates Werkzeug.Nachdem ich ein paar Stunden damit gestolpert war, beschloss ich zu teilen, was ich gefunden habe, obwohl es ein sehr alter Beitrag ist.
Damit es richtig funktioniert, musste ich Folgendes tun:
hbmddl
einstellencreate
oder setzencreate-drop
resources
Ordner gelegt, ich benutze Maven.Hoffentlich hilft das.
quelle
Bitte stellen Sie sicher, dass Ihre import.sql korrekt formatiert ist. Beginnen Sie mit einer Einzeiler-Einfügeanweisung zum Testen.
quelle
Die Standardmethode in JPA ist die Verwendung der Konfigurationseigenschaft
javax.persistence.sql-load-script-source
.Sie können verschiedene Einstellungen für den Schemaexport und den Testdatenimport untersuchen, die in der
AvailableSettings
Klasse von Hibernate aufgeführt sind .quelle