一尘不染

如何使用现代的Spring Boot + Data JPA和Hibernate设置生成ddl创建脚本?

spring-boot

目前,我在中使用@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中设置它们似乎无效。

我见过的例子是这样那丝了一大堆额外的豆子,但他们没有使用MySQL。无论如何,要做到这一点,我需要配置spring现在正在照顾的许多选项。

我的目标是:

  • 在MYSQL方言中生成模式创建sql脚本
  • 无需数据库连接
  • 在构建目录中输出脚本
  • 另外,生成hibernate的envers表将是一个巨大的优势。

我不想:

  • 在实时数据库上创建/删除架构

库版本:

   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)


阅读 641

收藏
2020-05-30

共1个答案

一尘不染

啊,在我发布此问题后,立即有一部分spring数据文档引起了我的注意:

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

完成此操作后,将在项目根目录中自动生成模式文件。

2020-05-30