7

Ho migrato un progetto Play dalla versione 2.3.4 alla 2.4.2. I progetti utilizzano JPA (Hibernate) ed Evolutions. Ho uno script iniziale Evolutions SQL, che riempie il database con alcuni dati di esempio. Questo script ora non funziona più, perché gli script di Evolutions vengono ora eseguiti prima che Hibernate generi le tabelle, il che ovviamente porta a un errore. È un comportamento desiderato? C'è un modo per cambiare l'ordine di esecuzione?Play Evolutions e JPA in Play Framework 2.4

risposta

0

Le evoluzioni riguardano la creazione e l'aggiornamento del database mediante semplici script SQL. Quindi, se si utilizza un quadro di riferimento che genera tabelle di dati stessi, come Hibernate, allora avete bisogno di spegnere evoluzioni (o spegnere autogenerazione e utilizzare solo evoluzioni) del database

Fill all'avvio

Ho un simile problema su Cassandra, quello che ho fatto - basta creare un codice che legga il file CQL ed eseguirlo, ed esegui questo codice dopo la creazione delle tabelle di dati reali.

come la vedo Hibernate già ha questa caratteristica - è necessario inserire il codice SQL personalizzato nel file /import.sql nella root del vostro classpath:

Se un file chiamato import.sql esiste nella radice di il percorso della classe ('/import.sql') Hibernate eseguirà le istruzioni SQL lette dal file dopo la creazione dello schema del database.

+0

Grazie per la risposta dettagliata, ma non sono d'accordo. Il documento Play afferma: "Quando si utilizza un database relazionale, è necessario un modo per tenere traccia e organizzare le evoluzioni dello schema del database". Questo non dice come accedere a quel database. A mio parere, Evolutions è stata un'aggiunta perfetta a Hibernate perché Hibernate ha solo possibilità di migrazione limitate. E il punto è che ha funzionato per anni in Play, quindi considero questo un bug. – linsenfips

+0

Hai scritto "Hibernate genera le tabelle" significa che Hibernate organizza il tuo database. È necessario utilizzare solo una meccanica di aggiornamento del database - evoluzione o generazione della tabella di ibernazione. Se si desidera utilizzare l'evoluzione, disattivare la generazione della tabella di ibernazione: http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-production. –

+0

AVVISO: gli utenti di Hibernate hanno provato a utilizzare SchemaUpdate per aggiornare automaticamente lo schema di un database di produzione. Questo può terminare rapidamente in caso di emergenza e non sarà consentito dal tuo DBA. –