web-dev-qa-db-ja.com

最新のSpring Boot + Data JPAおよびHibernateセットアップでddl作成スクリプトを生成する方法は?

現在、私はデフォルトの@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で設定しても効果はないようです。

私は例を見ました このように 余分なBeanの束を結んでいますが、Mysqlを使用していません。いずれにせよ、そのように行うには、Springが現在対応している多くのオプションを設定する必要があります。

私の目標は:

  • MYSQLダイアレクトでスキーマ作成SQLスクリプトを生成する
  • データベース接続は必要ありません
  • ビルドディレクトリにスクリプトを出力します
  • また、Hibernate Enversテーブルを生成することは大きなプラスになります。

したくないです:

  • ライブデータベースでスキーマを作成/削除する

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

(Mavenではなくgradleを使用)

42
Casey

ああ、この質問を投稿した直後に、春のデータドキュメントのセクションが目を引きました。

73.5 JPAプロパティの設定 さらに、ローカルEntityManagerFactoryの作成時に、spring.jpa.properties。*のすべてのプロパティが(プレフィックスが削除された)通常のJPAプロパティとして渡されます。

したがって、私自身の質問に答えるには、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

これを行った後、プロジェクトルートにスキーマファイルが自動的に生成されました。

86
Casey

これは、スプリングブートでルートフォルダーにddl作成スクリプトを生成するためのyml固有の構成です。

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

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>

これにより、指定された場所にスクリプトが生成されます。さまざまなユースケースで使用できる他のプロパティもあります。 here を参照してください

構成全体は次のようになります

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