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

Spring Data调用findAll返回空列表,H2数据库非空但数据未插入怎么办

问题解决方案

你遇到的问题是Spring Boot 2.5+版本默认的数据源初始化顺序导致的:Hibernate自动建表操作晚于data.sql执行,会清空data.sql插入的所有数据。

核心修改方案

修改application.properties配置文件,新增3行配置即可解决:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# 新增配置开始
# 开启SQL脚本初始化
spring.sql.init.mode=always
# 调整执行顺序,让data.sql在Hibernate建表完成后执行
spring.jpa.defer-datasource-initialization=true
# 因为你已经在data.sql中编写了建表语句,关闭Hibernate自动建表避免冲突
spring.jpa.hibernate.ddl-auto=none
# 新增配置结束

server.port=8888

可选验证配置

如果修改后仍未生效,可添加如下配置开启H2控制台,启动后访问http://localhost:8888/h2-console,输入配置中的数据库连接地址、账号密码登录,直接查看表数据以及SQL执行日志定位问题:

spring.h2.console.enabled=true

内容的提问来源于stack exchange,提问作者Shima Mahmoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:57:02