You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:10:32