Как создать ddl-создание script с помощью современной установки Spring Boot + Data JPA и Hibernate?

В настоящее время я использую аннотацию по умолчанию @SpringBootApplication со следующими свойствами в 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

Поскольку JPA 2.1, я должен иметь возможность использовать свойства javax.persistence.schema-generation.*, но установка их в моем приложении application.properties, похоже, не имеет эффекта.

Я видел примеры как это, которые соединяют целую кучу дополнительных beans, но они не используют Mysql. И в любом случае, делая это, мне нужно настроить многие параметры, которые spring заботится обо мне сейчас.

Мои цели заключаются в следующем:

  • Создайте создание схемы sql script на диалекте MYSQL
  • без подключения к базе данных
  • Вывести script в каталог сборки
  • Также создание таблиц спящего режима будет огромным плюсом.

Я не хочу:

  • Создание/удаление схем в живой базе данных

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

(Используя gradle, а не maven)

Ответы

Ответ 1

А, сразу после того, как я разместил этот вопрос, я увидел раздел документации spring:

73.5 Настроить свойства JPA Кроме того, все свойства в spring.jpa.properties. * передаются как обычные свойства JPA (с префиксом разделяется), когда локальный EntityManagerFactory создан.

Итак, чтобы ответить на мой собственный вопрос: префикс свойств javax.persistence с помощью 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

После этого файл схемы был сгенерирован автоматически в корне проекта.

Ответ 2

Это специфичная для yml конфигурация для того, чтобы заставить весеннюю загрузку генерировать сценарий создания ddl в корневой папке:

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

Ответ 3

Обновление jpa properties создаст сценарии для вас.

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

Это сгенерирует сценарии в указанном месте. Есть и другие свойства, которые могут быть использованы в различных случаях использования, пожалуйста, обратитесь сюда

Ответ 4

Для приложения spring -boot вам необходимо установить следующее в файле application.properties, чтобы получить файл 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