Momenteel gebruik ik de standaard @SpringBootApplication
-annotatie met de volgende eigenschappen in application.properties
:
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
Sinds JPA 2.1 zou ik de eigenschappen javax.persistence.schema-generation.*
moeten kunnen gebruiken, maar ze in mijn application.properties instellen lijkt geen effect te hebben.
Ik heb voorbeelden gezien zoals dezedie een hele hoop extra bonen opleveren, maar ze gebruiken geen Mysql. En om het zo te doen, moet ik in ieder geval veel opties configureren die de lente nu voor mij regelt.
Mijn doelen zijn:
- Genereer een SQL-script voor het maken van een schema in het MYSQL-dialect
- zonder dat een databaseverbinding vereist is
- Voer het script uit in de bouwmap
- Ook het genereren van hibernate envers-tabellen zou een enorm pluspunt zijn.
Ik wil niet:
- Schema’s maken/zetten in een live database
Lib-versies:
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
(Met gradle, niet maven)
Antwoord 1, autoriteit 100%
Ah, direct nadat ik deze vraag had gepost, viel mijn oog op een gedeelte van de lentegegevensdocumenten:
73.5 JPA-eigenschappen configurerenDaarnaast alle eigenschappen in
spring.jpa.properties.* worden doorgegeven als normale JPA-eigenschappen
(met het voorvoegsel gestript) wanneer de lokale EntityManagerFactory is
gemaakt.
Dus, om mijn eigen vraag te beantwoorden: voeg de eigenschappen javax.persistence toe aan 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
Hierna werd het schemabestand automatisch gegenereerd in de hoofdmap van het project.
Antwoord 2, autoriteit 11%
Dit is een yml-specifieke configuratie om spring boot een ddl-creatiescript in de hoofdmap te laten genereren:
spring:
jpa:
properties:
javax:
persistence:
schema-generation:
create-source: metadata
scripts:
action: create
create-target: create.sql
Antwoord 3
Als u uw jpa properties
bijwerkt, worden de scripts voor u gegenereerd.
<prop key="javax.persistence.schema-generation.scripts.action">drop-and-create</prop>
<prop key="javax.persistence.schema-generation.scripts.create-target">./create_mssql.sql</prop>
<prop key="javax.persistence.schema-generation.scripts.drop-target">./drop_mssql.sql</prop>
Hiermee worden de scripts op de opgegeven locatie gegenereerd. Er zijn ook andere eigenschappen die voor verschillende use-cases kunnen worden gebruikt, raadpleeg hier
De hele configuratie ziet er zo uit
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="my-persistence-unit" transaction-type="JTA">
<description>Forge Persistence Unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.sql-load-script-source" value="META-INF/data.sql"/>
</properties>
</persistence-unit>
</persistence>