Domanda

Quando la distribuzione di applicazioni, io spesso uso la capacità di Hibernate per creare lo schema del database al fine di semplificare l'implementazione. Ciò è facilmente ottenibile configurando hibernate.hbm2ddl.auto struttura.

Tuttavia, a volte ho anche bisogno di inserire alcuni dati iniziali a base di dati, ad esempio per l'utente root. C'è un modo ho potuto raggiungere questo obiettivo tramite Hibernate con un qualche tipo di file di testo carico?

So che avrei potuto facilmente programmare il codice che lo farà, ma chiedo solo se c'è già qualche programma di utilità che può aiutarmi a raggiungere la stessa tramite la configurazione?

È stato utile?

Soluzione

Ho trovato questo facendo una ricerca sui "dispositivi Hibernate":

  

Hibernate creerà il database   quando la fabbrica entità manager è   creato (in realtà quando Hibernate di   SessionFactory viene creato dal   entità fabbrica manager). Se un file   denominato import.sql esiste nella radice   il percorso di classe ( '/import.sql')   Hibernate eseguire l'SQL   dichiarazioni lette dal file dopo   la creazione dello schema del database.   E 'importante ricordare che   prima di Hibernate crea lo schema di esso   svuota (cancellare tutte le tabelle,   vincoli, o qualsiasi altro database   oggetto che sta per essere creata in   il processo di costruzione dello schema).

Fonte: http: //www.velocityreviews. com / forum / t667849-hibernate-quotfixturesquot-o-Database-population.html

Fare un tentativo e fateci sapere se funziona!

Altri suggerimenti

L'aggiunta import.sql al percorso classe di grandi opere, i controlli hbm2ddl se il file esiste e lo esegue. L'unico dettaglio ulteriore è che ogni comando SQL deve trovarsi sulla propria linea, altrimenti fallirà l'esecuzione.

Questo sarà anche funziona solo se hbm2ddl.auto è impostato su create o create-drop.

hibernate.hbm2ddl. import_files nella configurazione di ibernazione. Modificare hibernate.hbm2ddl.auto proprietà per creare. Aggiungere initial_data.sql nella directory / classi con codice SQL iniziale per inserire i dati. Hibernate eseguire questo dopo creare lo schema del database.

<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>

Se non si desidera aggiungere una proprietà nella configurazione di Hibernate è possibile creare un file import.sql nella directory / classi e hibernate uso questo per difetto se la proprietà hibernate.hbm2ddl.auto è uguale per creare

Perché hbm2ddl.auto e hbm2ddl.import_files proprietà sono male

(Quando abusato come strumento per la gestione del cambiamento database)

Come detto altrove , utilizzando hibernate.hbm2ddl.auto e hibernate.hbm2ddl.import_files per la gestione del cambiamento di database ha po 'di grave svantaggi:

  1. Solo la struttura può essere modificato. valori esistenti potrebbero essere sovrascritti o - in uno scenario peggiore dei casi - semplicemente mandato in Nirvana. Senza uno strumento come liquibase o scriptella , non si dispone di alcun capacità ETL .
  2. Questo metodo non ha transazioni. Sia la struttura e le dichiarazioni dei dati verranno eseguiti prima che un gestore di transazioni sta prendendo il sopravvento. Diciamo che si dispone di un errore nella dichiarazione di 42 256. Il database è in uno stato incoerente ora.
  3. Imvho, perdi la trasparenza e il controllo: in cui uno script scriptella o cambiare liquibase impostati o di solito impegnati assieme ai cambiamenti nei modelli di dominio, si fa un cambiamento nel modello di dominio e la speranza (in fondo) che Hibernate scoprire cosa fare. (Non lo fa, ma che è una storia diversa.)
  4. Per l'integrazione, di sistema e test di accettazione si limita a assumere che i database di test sono in assolutamente, esattamente nello stesso stato come database di produzione. È necessario tenere traccia di che manualmente (Buona fortuna e buon divertimento con essa;)). Nel caso in cui si commette un errore, solo un piccolo slittamento è sufficiente, i risultati possono molto saremo catastrofico.

Io personalmente uso liquibase per la gestione del cambiamento database e ho sviluppato il seguente flusso di lavoro per ridurre il lavoro di manutenzione:

  • Creare un changelog dalla riga di comando della mia ultima struttura di rilascio
  • Crea un changelog del mio ultimo banca dati
  • manualmente diff entrambi i registri delle modifiche (di solito le modifiche non sono così enormi, e se lo sono, essi si riuniscono di solito una delle carenze di liquibases diff comando.
  • creare un set di cambiamento

Anche per i cambiamenti complicati in cui si deve applicare un customChange , questo può essere realizzato in una questione di ore, compresa la definizione di rollback, il test e la documentazione. Per modifiche banali, si tratta di una questione di minuti. In pratica: si deve fare un po 'di lavoro (ho creato insiemi di modifiche personalizzate per 4 configurazioni di database in meno di un giorno), ma si ottiene la pace della mente che si è fatto tutto il possibile per mantenere il database in uno stato consistente.

Dopo un paio d'ore d'inciampo con questo, ho deciso di condividere quello che ho trovato, anche se è un post molto vecchio.

Per farlo funzionare correttamente, ho dovuto effettuare le seguenti operazioni:

  • hbmddl impostato su create o create-drop
  • file.sql in radice classpath; nel mio caso, ho appena messo nella cartella resources, sto usando Maven.
  • ciascun comando SQL in una sola riga
  • ogni file.sql deve avere una riga vuota al beggining del file ==> non so il motivo di questo, ma se non inserisco che riga vuota, a il tempo di esecuzione dei server mi dice che c'è un errore di sintassi in prossimità del primo carattere.

La speranza che aiuta.

Si prega di assicurarsi che l'import.sql è formattato correttamente. Inizia con un'istruzione di inserimento uno di linea per testare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top