Spring JPA ddl-auto=使用初始数据创建

Spring JPA ddl-auto=create with initial data

我想使用 Spring JPA auto table 创建我的 tables 然后我想插入我自己的数据 (SQL).

为了能够做到这一点,我在 application.properties

中使用了这些行
spring.jpa.hibernate.ddl-auto=create

spring.sql.init.data-locations=\
classpath:database/sectors_data.sql,\
classpath:database/users_data.sql
spring.sql.init.mode=always

问题是,当我使用 ddl-auto=create 和 运行 我的应用程序时,它会创建 table,但不会插入数据。为了插入数据,我应该再次将 ddl-auto=create 更改为 ddl-auto=update 和 运行 我的应用程序。

我想知道有没有一种方法可以只用一个 运行,创建 table 然后插入数据,而无需使用 Flyway 等任何数据库迁移工具。

感谢您的回答。

请注意 script-based 初始化,即通过 schema.sql 和 data.sql 以及 Hibernate 一起初始化可能会导致一些问题。

或者我们禁用 Hibernate 自动模式创建:

spring.jpa.hibernate.ddl-auto=none

这将确保 script-based 初始化直接使用 schema.sql 和 data.sql 执行。

如果我们仍然希望将 Hibernate 自动模式生成与 script-based 模式创建和数据填充相结合,我们将不得不使用:

spring.jpa.defer-datasource-initialization=true

这将确保在执行 Hibernate 架构创建后,还会读取 schema.sql 以了解任何其他架构更改,并执行 data.sql 以填充数据库。

此外,script-based默认情况下仅对嵌入式数据库执行初始化,要始终使用脚本初始化数据库,我们必须使用:

spring.sql.init.mode=always

参考spring-boot-data-sql-and-schema-sql 另请参阅官方 Spring 文档 Initialize a Database Using Basic SQL Scripts