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

11 浏览
0 Comments

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

目前,我正在使用默认的@SpringBootApplication注解以及在application.properties中的以下属性:\n

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

\n自从JPA 2.1以来,我应该能够使用javax.persistence.schema-generation.*属性,但是在我的application.properties中设置它们似乎没有效果。\n我看到了一些类似这样的示例,它们连接了一堆额外的bean,但是它们没有使用Mysql。而且无论如何,像那样做需要我配置许多Spring现在已经为我处理的选项。\n我的目标是:\n

    \n

  • 生成一个在MYSQL方言中的模式创建SQL脚本
  • \n

  • 不需要数据库连接
  • \n

  • 将脚本输出到构建目录
  • \n

  • 同时生成Hibernate Envers表将是一个巨大的加分项。
  • \n

\n我不想:\n

    \n

  • 在实际数据库上创建/删除模式
  • \n

\n库版本:\n

   hibernate          : 4.3.11.FINAL
   spring framework   : 4.2.5.RELEASE
   spring-boot        : 1.3.3.RELEASE
   spring-data-jpa    : 1.10.1.RELEASE   // 用于支持querydsl 4
   spring-data-commons: 1.12.1.RELEASE   // 用于支持querydsl 4

\n(使用gradle而不是maven)

0
0 Comments

问题的出现原因:

在现代的Spring Boot + Data JPA和Hibernate设置中,有时需要生成DDL创建脚本,但又不想启动主应用程序。因此需要找到一种方法来独立生成模式。

解决方法:

通过使用Hibernate和Reflections库,可以编写一个独立的代码来生成DDL。下面是一个示例代码,它使用了以下依赖项:

- org.hibernate:hibernate-core

- org.reflections:reflections

示例代码中的generateSchema方法实现了生成DDL的逻辑。它首先创建一个StandardServiceRegistryBuilder实例,并设置Hibernate方言。然后通过scanForEntities方法扫描指定的包,找到所有被@Entity注解的类。接下来,使用MetadataSources将这些实体类添加到元数据中。最后,使用SchemaExport生成DDL脚本,并将其写入指定的输出文件中。

这样,通过运行SchemaGenerator类的main方法,就可以独立生成DDL脚本,而无需启动主应用程序。

0
0 Comments

问题的出现原因:

该问题是因为需要使用Spring Boot + Data JPA和Hibernate来生成DDL创建脚本,但是需要找到正确的配置方法来实现这一目标。

解决方法:

通过以下的yml配置文件或者properties配置文件来实现DDL创建脚本的生成:

1. 在yml配置文件中的spring.jpa.properties中添加以下配置:

spring:

jpa:

properties:

javax:

persistence:

schema-generation:

create-source: metadata

scripts:

action: create

create-target: create.sql

2. 在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

3. 根据需要,可以更改生成脚本的行为。默认情况下,生成的脚本会追加到现有的文件中,可以通过修改配置来更改这一行为。

通过上述配置,就可以使用现代的Spring Boot + Data JPA和Hibernate设置来生成DDL创建脚本了。

0
0 Comments

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

问题的出现的原因:

提问者在使用Spring Boot + Data JPA和Hibernate配置时想要生成DDL创建脚本,但不清楚如何实现。

解决方法:

通过查看Spring Data文档的一个部分,提问者找到了解决方法。在配置文件中使用spring.jpa.properties前缀来指定javax.persistence属性,即可实现自动生成DDL脚本。具体配置如下:

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

配置完成后,自动生成的schema文件将保存在项目的根目录下。如果想要在不运行整个应用程序的情况下生成DDL脚本,可以使用Flyway来管理数据库架构。

其他相关问题和建议:

- 是否有办法在每个DDL命令的末尾添加分号?

- 是否可以在不运行整个应用程序的情况下执行DDL脚本?

- 是否有办法只生成特定包下的实体类的DDL脚本?

- 如何在现有数据库上生成"update.sql"而不是在空数据库上生成DDL脚本?

- 生成的文件是否可以替换而不是追加?

最后,需要注意的是,根据最新的Jakarta Persistence规范,属性名应以`spring.jpa.properties.jakarta.persistence.`开头,而不是`spring.jpa.properties.javax.persistence.`。

0