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
相关产品推荐
相关产品推荐

