Domanda

Qual è il modo migliore per riempire le tabelle create con jpa all'avvio / spegnimento dell'applicazione? come ma con il linguaggio di manipolazione dei dati invece del linguaggio di definizione dei dati. sto usando HibernatePersistence come provider di persistenza.

È stato utile?

Soluzione 2

Risolto con import.sql nel pacchetto predefinito e selezionando " crea " come valore hibernate.hbm2ddl.auto. Hibernate supporta anche proprietà hibernate.hbm2ddl.import_files .

Altri suggerimenti

Se stai usando anche la primavera, allora questa risposta funzionerà.

Se non si utilizza Spring, è necessario eseguire manualmente il codice DDL. Si noti che Hibernate ha solo un supporto limitato per modificare il database (in pratica può solo creare tabelle). Quindi, se hai bisogno di qualcos'altro, devi utilizzare l'SQL personalizzato.

[EDIT] Se non usi Spring, allora trovi un modo per accedere alla Hibernate Session . Richiamare il metodo doWork () che consente di eseguire SQL arbitrario.

Un approccio diverso è quello di creare oggetti di dominio e persisterli. Preferisco il primo approccio, dal momento che puoi correggere gli ID degli oggetti generati in questo modo e fare altre cose che sono più complesse usando l'interfaccia JPA.

Non vuoi scrivere molte istruzioni insert , quindi inserire i dati nel DB ed esportarli con uno strumento SQL come SquirrelSQL che può creare insert dichiarazioni per te. Inseriscili in un file aggiuntivo, leggi il file all'avvio, dividilo in ; ed esegui ogni pezzo.

Penso che riempire le tue tabelle con istruzioni di inserimento sql di basso livello non sia l'opzione migliore poiché dovresti occuparti manualmente delle chiavi esterne e anche riformattare queste istruzioni con il tuo codice.

Dato che hai già un modello a oggetti e ORM, un'altra soluzione più portatile è quella di definire i tuoi dati di init con i tuoi oggetti e lasciare che il provider JPA li persista. Sebbene questa soluzione possa sembrare ingombrante, ma l'utilizzo di progetti come questo la rende più plausibile.

A scopo di test, ho iniziato a usare un semplice script groovy e il plugin gmaven di org.codehaus.groovy.maven. Il plugin gmaven esegue lo script groovy e lo script crea import.sql durante il ciclo di vita di generate-test-resources. L'uso di loop e contatori in uno script è molto meglio della digitazione manuale di un file pieno di istruzioni insert. Questo ovviamente richiede che tu abbia ordinato roba hbm2ddl, in quanto sembra che tu l'abbia già capito dagli aggiornamenti e dalle risposte precedenti.

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