Frage

Wenn Sie Anwendungen bereitstellen, verwende ich oft Hibernate Kapazität Datenbankschema zu schaffen, um den Einsatz zu vereinfachen. Dies ist leicht erreichbar durch die Konfiguration hibernate.hbm2ddl.auto Eigenschaft.

Doch gelegentlich Ich brauche auch einige erste Daten in die Datenbank einfügen, zB Root-Benutzer. Gibt es eine Weise, die ich mit irgendeiner Art von Last Textdatei dies über Hibernate erreichen könnte?

Ich weiß, dass ich einfach den Code programmieren könnte, die so tun, aber frag dich nur, wenn es bereits einige Dienstprogramm, das ich zu erreichen das gleiche über die Konfiguration helfen kann?

War es hilfreich?

Lösung

Ich fand das von der Suche auf „Hibernate Leuchten“:

  

Ruhezustand wird die Datenbank erstellen   wenn das Unternehmen Manager Fabrik   erstellt (eigentlich, wenn Hibernate   Session wird durch die erstellt   EntityManager Fabrik). Wenn eine Datei   genannt import.sql existiert in der Wurzel   Klassenpfad ( ‚/import.sql‘)   Hibernate ausführen wird die SQL   Aussagen lesen aus der Datei nach   die Erstellung des Datenbankschemas.   Es ist wichtig, sich daran zu erinnern, dass   vor Hibernate erstellt das Schema es   Leergut es (alle Tabellen löschen,   Einschränkungen oder eine beliebige andere Datenbank   Objekt, das in wird erstellt werden   der Prozess des Aufbaus des Schemas).

Quelle: http: //www.velocityreviews. com / Foren / t667849-hibernate-quotfixturesquot-or-Datenbank-population.html

Versuchen Sie es einmal und lassen Sie uns wissen, ob es funktioniert!

Andere Tipps

Hinzufügen import.sql zum Klassenpfad funktioniert gut, hbm2ddl überprüft, ob die Datei vorhanden ist und führt sie aus. Das einzige zusätzliche Detail ist, dass jeder SQL-Befehl auf einer eigenen Zeile stehen muss, sonst wird es zur Ausführung fehlschlagen.

Dies wird auch nur funktionieren, wenn hbm2ddl.auto create oder create-drop gesetzt.

In Hibernate Eigenschaft hibernate.hbm2ddl. import_files in Ihrer Hibernate-Konfiguration. Ändern hibernate.hbm2ddl.auto Eigenschaft zu erstellen. In initial_data.sql in / classes mit anfänglichem SQL-Code zum Einfügen von Daten. Hibernate ausführen diese nach Datenbankschema erstellen.

<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 nicht möchten, dass eine Eigenschaft in Ihrer Hibernate Konfiguration hinzuzufügen Sie eine Datei import.sql in / Klassen-Verzeichnis erstellen und verwenden können diese standardmäßig überwintern, wenn Eigenschaft hibernate.hbm2ddl.auto erstellen gleich

Warum hbm2ddl.auto und hbm2ddl.import_files Eigenschaften sind böse

(Bei Verwendung als Werkzeug für die Datenbank Change Management fehl angewandt)

Wie gesagt anderswo , für Datenbank-Change-Management-hibernate.hbm2ddl.auto und hibernate.hbm2ddl.import_files verwendet, hat einige ernst Nachteile:

  1. Es kann nur die Struktur verändert werden. Vorhandene Werte können überschrieben oder - im schlimmsten Fall - einfach ins Nirvana geschickt. Ohne ein Werkzeug wie liquibase oder scriptella , Sie haben keine ETL Fähigkeiten.
  2. Diese Methode hat keine Transaktionen. Sowohl die Struktur und die Daten-Anweisungen werden vor einem Transaktionsmanager ausgeführt werden, übernehmen. Angenommen, Sie haben einen Fehler in Anweisung 42 von 256. Ihre Datenbank jetzt in einem inkonsistenten Zustand befindet.
  3. Imvho, verlieren Sie Transparenz und Kontrolle: wo ein scriptella Skript oder liquibase Änderung gesetzt oder in der Regel mit den Änderungen in den Domain-Modellen begangen zusammen, haben Sie eine Änderung des Domain-Modell und die Hoffnung (im Grunde), die werden herausfinden, überwintern, was machen. (Es ist nicht, aber das ist eine andere Geschichte.)
  4. Für die Integration, System- und Abnahmetest du nur übernehmen , dass Ihre Testdatenbanken sind in der absolut, genau denselben Zustand als Produktionsdatenbank. Sie müssen im Auge behalten, die manuell (Viel Glück und viel Spaß damit;)). Für den Fall, dass Sie einen Fehler, nur ein kleiner Ausrutscher ausreichend ist, können die Ergebnisse sehr wir katastrophal sein werden.

Ich persönlich liquibase für Datenbank-Change-Management verwenden und den folgenden Workflow entwickelt, um die Wartungsarbeiten zu reduzieren:

  • von der Kommandozeile ein Changelog erstellen meiner letzten Release-Struktur
  • Erstellen Sie eine Changelog meiner neuesten Datenbank
  • manuell diff beiden Änderungsprotokolle (in der Regel Änderungen sind nicht so groß, und wenn sie sind, sie in der Regel eine der Unzulänglichkeiten treffen liquibases diff Befehl.
  • erstellen eine Änderung Satz

Auch für komplizierte Änderungen in dem man eine customChange , kann dies in wenigen Stunden erreicht werden, einschließlich der Definition von Rollbacks, Test und Dokumentation. Für triviale Änderungen, ist es eine Sache von Minuten. Grundsätzlich gilt: Sie haben ein wenig mehr Arbeit zu tun (ich habe für 4 Datenbankkonfigurationen in weniger als einem Tag angepasste Änderung Sets erstellt), aber Sie erhalten die Sicherheit, dass Sie alles getan haben, möglich, die Datenbank in einem konsistenten Zustand zu halten.

Nach ein paar Stunden mit diesem Stolpern, habe ich beschlossen, zu teilen, was ich gefunden habe, obwohl es sich um eine sehr alte Post ist.

Um es richtig funktioniert, ich hatte folgendes zu tun:

  • hbmddl auf create oder create-drop
  • file.sql in Classpath Wurzel; in meinem Fall, ich habe es gerade in resources Ordner bin ich mit Maven.
  • jeder SQL-Befehl in einer Zeile
  • jeder file.sql muss eine Leerzeile am beggining der Datei hat ==> nicht wissen, den Grund für diese, aber wenn ich einfügen nicht, dass die Leerzeile, bei der Zeitpunkt der Ausführung der Server sagt mir, es gibt einen Syntaxfehler in der Nähe des ersten Zeichens.

Ich hoffe, das hilft.

Bitte stellen Sie sicher, dass Ihre import.sql richtig formatiert ist. Beginnen Sie mit einer Einzeiler Insert-Anweisung zu testen.

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