7

Ich migrierte ein Play-Projekt von Version 2.3.4 zu 2.4.2. Die Projekte verwenden JPA (Hibernate) und Evolutions. Ich habe ein erstes Evolutions SQL-Skript, das die Datenbank mit einigen Beispieldaten füllt. Dieses Skript funktioniert jetzt nicht mehr, da die Evolutions-Skripte jetzt ausgeführt werden, bevor Hibernate die Tabellen generiert, was offensichtlich zu einem Fehler führt. Ist das ein gewünschtes Verhalten? Gibt es eine Möglichkeit, die Reihenfolge der Ausführung zu ändern?Play Evolutions und JPA in Play Framework 2.4

Antwort

0

Evolutions sind über die Erstellung und Aktualisierung der Datenbank durch einfache SQL-Skripte. Also, wenn Sie einige Rahmen verwenden, die Datentabellen selbst erzeugt, wie Hibernate, dann müssen Sie Evolutionen auszuschalten (oder automatische Generierung ausschalten und verwenden nur Evolutionen)

Fill Datenbank beim Start

ich ein ähnliches haben Problem bei Cassandra, was ich getan habe - einfach einen Code erstellen, der die CQL-Datei liest und ausführt, und diesen Code nach der Erstellung der eigentlichen Datentabellen ausführen.

Wie ich sehe, Hibernate bereits über diese Funktion - Sie benötigen eine benutzerdefinierten SQL-Code in die /import.sql Datei in der Wurzel Ihres Classpath setzen:

Wenn eine Datei mit dem Namen import.sql in der Wurzel besteht aus Der Klassenpfad ('/ import.sql') Hibernate führt die SQL-Anweisungen aus, die nach dem Erstellen des Datenbankschemas aus der Datei gelesen werden.

+0

Danke für die ausführliche Antwort, aber ich stimme nicht zu. Die Play-Dokumentation besagt: "Wenn Sie eine relationale Datenbank verwenden, benötigen Sie eine Möglichkeit, Ihre Datenbankschemaentwicklungen zu verfolgen und zu organisieren". Das sagt nicht, wie man auf diese Datenbank zugreift. Meiner Meinung nach war Evolutions eine perfekte Ergänzung zu Hibernate, da Hibernate nur begrenzte Migrationsmöglichkeiten bietet. Und der Punkt ist, dass es seit Jahren im Play funktioniert, also halte ich das für einen Fehler. – linsenfips

+0

Sie haben geschrieben "Hibernate generiert die Tabellen" bedeutet, dass Hibernate Ihre Datenbank organisiert. Sie müssen nur eine Datenbankaktualisierungsmechanik verwenden - Evolution oder Hibernate-Tabellengenerierung. Wenn Sie evolution verwenden möchten, schalten Sie die Generierung der Hibernate-Tabelle aus: http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-production. –

+0

WARNUNG: Wir haben festgestellt, dass Hibernate-Benutzer versuchen, SchemaUpdate zu verwenden, um das Schema einer Produktionsdatenbank automatisch zu aktualisieren. Dies kann schnell zu einem Desaster führen und wird von Ihrem DBA nicht zugelassen. –