Spring Boot 2.5.0集成JPA+H2 使用data.sql初始化提示表不存在
问题根因
Spring Boot 2.5.0版本对数据源初始化逻辑做了默认调整:原生数据源脚本(data.sql、schema.sql)的执行时机,默认早于Hibernate的DDL自动建表操作。你移除data.sql时Hibernate能正常建表,加上data.sql后脚本先执行,此时表还未创建,就会抛出表不存在异常。
另外你的data.sql存在语法问题:H2数据库默认双引号用于识别表名、字段名等标识符,字符串值需要用单引号包裹,否则后续也可能抛出语法错误。
解决方案(任选一种即可)
- 方案1:调整初始化顺序(最便捷)
在application.yml中添加配置,让Hibernate先完成建表再执行data.sql:
spring: jpa: defer-datasource-initialization: true
同时修正data.sql的字符串引号:
INSERT INTO BUSINESS_SUMMARY VALUES (1, 'ALM470', 'B48', 3);
- 方案2:使用Hibernate专属初始化脚本
不需要修改配置,将data.sql重命名为import.sql,Hibernate执行完DDL建表后会自动执行该脚本插入数据,注意同样要修正字符串引号。 - 方案3:全手动控制表结构创建
关闭Hibernate自动建表,自行通过schema.sql创建表结构,再用data.sql插入数据,添加配置:
spring: jpa: hibernate: ddl-auto: none
新增schema.sql文件编写对应建表语句即可。
内容的提问来源于stack exchange,提问作者cjt
相关产品推荐
相关产品推荐

