2016-05-01 13 views
18

Attualmente, sto usando l'annotazione di default @SpringBootApplication con le seguenti proprietà in application.properties:Come generare uno script di creazione di ddl con una moderna installazione Boot/Data Spring JPA e Hibernate?

spring.datasource.url=jdbc:mysql://localhost/dbname 
spring.datasource.username=X 
spring.datasource.password=X 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.jpa.hibernate.naming_strategy=my.package.CustomNamingStrategy 

Dal JPA 2.1, dovrei essere in grado di utilizzare le javax.persistence.schema-generation.* proprietà, ma impostandoli nei miei application.properties sembra non ha alcun effetto

Ho visto esempi like this che collegano un sacco di fagioli extra, ma non usano Mysql. E in ogni caso, farlo così mi richiede di configurare molte opzioni che la primavera si sta prendendo cura di me ora.

I miei obiettivi sono:

  • generare uno script SQL creazione dello schema in dialetto MYSQL
  • senza una connessione al database sia necessario
  • uscita lo script nella directory di compilazione
  • generando anche ibernazione tavoli envers sarebbe un vantaggio enorme.

io non voglio:

  • Crea schemi/goccia su un database dal vivo

versioni Lib:

hibernate   : 4.3.11.FINAL 
    spring framework : 4.2.5.RELEASE 
    spring-boot  : 1.3.3.RELEASE 
    spring-data-jpa : 1.10.1.RELEASE // for querydsl 4 support 
    spring-data-commons: 1.12.1.RELEASE // for querydsl 4 support 

(Usando Gradle, non Maven)

risposta

40

Ah, subito dopo ho postato questo su una sezione dei documenti di dati di primavera attirato la mia attenzione:

73.5 Configure JPA properties Inoltre tutte le proprietà in spring.jpa.properties * sono passati attraverso i normali proprietà JPA (con il prefisso spogliato) quando l'EntityManagerFactory locale. è creato.

Quindi, per rispondere alla mia domanda: prefissare le proprietà javax.persistence con spring.jpa.properties:

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata 
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create 
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql 

Dopo questa operazione, il file di schema è stato generato automaticamente nella radice del progetto.

+0

era sufficiente per aggiungere quelle proprietà per la configurazione di primavera per ottieni il risultato che cercavi o hai anche dovuto scrivere del codice Java per chiamare qualcosa come Persistence.generateSchema (...)? Mi piacerebbe vedere più della tua soluzione se puoi condividere. – Firefly

+0

Ammessa la risposta, in sostanza dopo aver aggiunto quella configurazione, il file è stato creato automaticamente nella directory delle fonti generate. – Casey

+0

Ho visto che il file è stato generato in fase di esecuzione. C'è un modo per generarlo 'offline'? –

-1

Per un'applicazione primavera-boot è necessario impostare il seguente nel file application.properties, al fine di ottenere il file create.sql

spring.jpa.generate-ddl=true 
spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata 
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create 
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql 
+0

funziona ancora senza spring.jpa.generate-ddl come mostra risposta accettata –

Problemi correlati