Spring Boot程序执行时无法创建数据库表且收到废弃配置警告
Spring Boot无法创建数据库表及Hibernate废弃配置警告解决办法
先处理Hibernate废弃配置警告
1. 替换共享缓存模式配置项
警告HHH90000021是因为使用了废弃的javax.persistence.sharedCache.mode配置,需替换为Jakarta EE规范的新配置项:
- 在
application.properties中,将:
修改为:spring.jpa.properties.javax.persistence.sharedCache.mode=XXXspring.jpa.properties.jakarta.persistence.sharedCache.mode=XXX - 若使用
application.yml,对应修改为:
(spring: jpa: properties: jakarta: persistence: sharedCache: mode: XXXXXX为原配置值,如ALL/NONE/ENABLE_SELECTIVE等)
2. 替换MySQL方言配置
警告HHH90000026提示MySQL57Dialect已废弃,需更换为通用MySQLDialect:
- 在配置文件中修改方言设置:
(Spring Boot 3+版本可省略该配置,框架会自动检测数据库版本适配方言)spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
解决无法创建数据库表问题
1. 检查JPA自动建表开关
确保spring.jpa.hibernate.ddl-auto配置正确:
- 开发环境可设为
create(每次启动重建表)或update(仅更新表结构); - 生产环境建议设为
validate(仅校验表结构)或none(关闭自动建表); - 错误示例:若设为
none或validate,新实体类不会自动创建表。
2. 验证数据库连接有效性
- 确认
spring.datasource.url、spring.datasource.username、spring.datasource.password配置正确,能正常连接目标数据库; - MySQL 8+需指定驱动类为
com.mysql.cj.jdbc.Driver,且URL需添加时区参数(如?serverTimezone=UTC); - 注意:Spring Boot不会自动创建数据库,需提前手动创建目标数据库。
3. 检查实体类配置
- 实体类必须添加
@Entity注解; - 主键字段需添加
@Id注解,自增主键需配合@GeneratedValue(strategy = GenerationType.IDENTITY)(MySQL适用); - 字段类型需与MySQL数据类型兼容(如Java的
String对应MySQL的VARCHAR,Long对应BIGINT等)。
4. 确认数据库用户权限
确保连接数据库的用户拥有创建表的权限,可通过MySQL命令授权:
GRANT CREATE ON your_database_name.* TO 'your_username'@'%'; FLUSH PRIVILEGES;
5. 开启Hibernate日志排查细节
添加日志配置查看具体建表SQL及错误:
logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
启动应用后,查看控制台输出的SQL语句,排查是否存在语法错误或字段不兼容问题。
内容的提问来源于stack exchange,提问作者vipin chaurasiya
相关产品推荐
相关产品推荐

