How to generate a ddl creation script with a modern Spring Boot + Data JPA and Hibernate setup?

前端 未结 3 1894
清酒与你
清酒与你 2020-11-30 23:51

Currently, I\'m using the default @SpringBootApplication annotation with the following properties in application.properties:

spring         


        
相关标签:
3条回答
  • 2020-12-01 00:01

    This is yml specific configuration for making spring boot generate ddl creation script in root folder:

    spring:
      jpa:
        properties:
          javax:
            persistence:
              schema-generation:
                create-source: metadata
                scripts:
                  action: create
                  create-target: create.sql
    
    0 讨论(0)
  • 2020-12-01 00:09

    Updating your jpa properties will generate the scripts for you.

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

    This will generate the scripts in the given location. There are other properties as well which can be used on various use-cases, please refer here

    The whole configuration will look like this

    <?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>
    
    0 讨论(0)
  • 2020-12-01 00:11

    Ah, right after I posted this question a section of the spring data docs caught my eye:

    73.5 Configure JPA properties In addition all properties in spring.jpa.properties.* are passed through as normal JPA properties (with the prefix stripped) when the local EntityManagerFactory is created.

    So, to answer my own question: prefix the javax.persistence properties with 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
    

    After doing this, the schema file was generated automatically in the project root.

    0 讨论(0)
提交回复
热议问题