SpringBoot 2.7.7升级后JPA/ORM结合data.sql无法生成表结构
解决SpringBoot 2.7.7中H2表生成与data.sql执行的矛盾问题
核心解决方案
添加配置项调整数据源初始化与JPA表生成的执行顺序:
spring.jpa.defer-datasource-initialization=true
完整有效配置
将你的配置修改为:
spring.datasource.url=jdbc:h2:mem:redditDB spring.datasource.name=redditDB spring.sql.init.mode=embedded spring.jpa.hibernate.ddl-auto=create spring.sql.init.continue-on-error=false spring.sql.init.data-locations=classpath:sql/dml/*.sql spring.jpa.defer-datasource-initialization=true
问题原因说明
SpringBoot 2.5.x版本开始调整了数据源初始化与JPA DDL生成的执行顺序:
- 2.4.x及更早版本:默认JPA先根据实体类生成数据库表,再执行
data.sql等初始化脚本 - 2.5.x及之后版本:默认
spring.sql.init相关脚本先执行,此时JPA尚未生成表,不仅插入操作无表可执行,还会干扰Hibernate的DDL生成流程,出现日志仅显示插入语句、无表创建语句的情况
添加spring.jpa.defer-datasource-initialization=true后,会延迟数据源初始化操作,直到JPA完成表创建后再执行data.sql脚本,恢复2.4.x版本的执行顺序,既保证表能正常生成,又能完成数据插入。
内容的提问来源于stack exchange,提问作者Roma Kap
相关产品推荐
相关产品推荐

