hibernate Spring JPA ddl-auto=create with initial data

x7rlezfr  于 2023-08-06  发布在  Spring
关注(0)|答案(1)|浏览(108)

我想使用Spring JPA自动创建表来创建我的表,然后我想插入我自己的数据(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并运行我的应用程序时,它创建了表,但没有插入数据。要使其插入数据,我应该将ddl-auto=create更改为ddl-auto=update并再次运行应用程序。
我想知道有没有一种方法可以只运行一次,创建表,然后插入数据,而不使用任何数据库迁移工具,如Flyway
谢谢你的回答。

dzjeubhm

dzjeubhm1#

请注意,基于脚本的初始化,即通过schema.sql和data.sql以及Hibernate一起初始化可能会导致一些问题。

我们可以禁用Hibernate自动模式创建:

spring.jpa.hibernate.ddl-auto=none

字符串
这将确保直接使用schema.sqldata.sql文件执行基于脚本的初始化。
如果我们仍然希望Hibernate自动模式生成与基于脚本的模式创建和数据填充结合,我们将不得不用途:

spring.jpa.defer-datasource-initialization=true


这将确保在执行Hibernate模式创建之后,还会读取schema.sql以获取任何额外的模式更改,并执行data.sql以填充数据库。
此外,基于脚本的初始化默认情况下只对嵌入式数据库执行,要始终使用脚本初始化数据库,我们必须用途:

spring.sql.init.mode=always


参考

相关问题