Spring项目使用data.sql创建表提示BILLIONAIRE表不存在如何解决
问题根因
Spring Boot 2.5及以上版本对SQL脚本初始化的默认逻辑做了调整:spring.sql.init.mode参数默认值为embedded,仅在测试环境下对嵌入式数据库自动执行data.sql脚本,常规运行环境下默认不会触发初始化脚本执行,导致表未创建,抛出表不存在的错误。
你已配置的jpa.defer-datasource-initialization: true是正确的,该配置保证JPA初始化完成后再执行SQL脚本,避免出现执行顺序冲突。
修复方案
在application.yml中新增spring.sql.init.mode: always配置,显式开启SQL脚本初始化,修复后完整配置如下:
spring: sql: init: mode: always datasource: url: jdbc:h2:mem:test driverClassName: org.h2.Driver username: sa password: jpa: database-platform: org.hibernate.dialect.H2Dialect defer-datasource-initialization: true hibernate: ddl-auto: none
可选补充校验
如果配置后仍存在表找不到问题,可额外检查以下两点:
- 确认
data.sql文件存放路径为src/main/resources根目录 - 为
Billionaire实体类添加@Table(name = "billionaires")注解,避免H2默认大小写转换导致的表名匹配失败:
@Data @Entity @Table(name = "billionaires") public class Billionaire { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String first_name; private String last_name; private String career; }
内容的提问来源于stack exchange,提问作者user14384473
相关产品推荐
相关产品推荐

