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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:27:04