相关文章推荐
开朗的书签  ·  使用C#进行数据库增删改查(二)-腾讯云开发 ...·  1 年前    · 
很拉风的酱牛肉  ·  Golang 学习笔记(09)—— ...·  2 年前    · 
大鼻子的山寨机  ·  Spring Boot之 ...·  2 年前    · 
爱搭讪的烤面包  ·  python连接db2数据库报错1042-掘金·  2 年前    · 
听话的麻辣香锅  ·  matlab中单引号作为字符输入-掘金·  2 年前    · 
Code  ›  解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)开发者社区
https://cloud.tencent.com/developer/article/1979748
月球上的海豚
1 年前
微风-- 轻许--

解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
微风-- 轻许--
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)

解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)

作者头像
微风-- 轻许--
发布 于 2022-04-13 15:28:02
2.5K 0
发布 于 2022-04-13 15:28:02
举报
文章被收录于专栏: java 微风 java 微风

项目中使用 JPA 和 mysql 。表名是全大写的。

出现 如下报错:

代码语言: javascript
复制
 java.sql.SQLSyntaxErrorException: Table 'XXX_ms.work_task' doesn't exist

各种查询后得知问题出在 hibernate 对于数据库命名策略的配置上。

我目前的使用的应该是默认配置,会自动把表名从大写转换为小写。

spring data jpa 是基于hibernate5.0 , 而 Hibernate5 关于数据库命名策略的配置与之前版本略有不同:

不再支持早期的 hibernate.ejb.naming_strategy,而是直接替换为两个新属性: hibernate.physical_naming_strategy

hibernate.implicit_naming_strategy

至于 physical_naming_strategy 则有两个常用的配置:

代码语言: javascript
复制
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

解决方法一:

可以在 springboot 项目中配置文件内加上配置行,设置命名为 无修改命名策略:

代码语言: javascript
复制
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

解决方法二:

1)重写命名策略中改表名为小写的方法:

代码语言: javascript
复制
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 * 重写 hibernate 对于命名策略中改表名大写为小写的方法
public class MySQLUpperCaseStrategy extends PhysicalNamingStrategyStandardImpl {
    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
 
推荐文章
开朗的书签  ·  使用C#进行数据库增删改查(二)-腾讯云开发者社区-腾讯云
1 年前
很拉风的酱牛肉  ·  Golang 学习笔记(09)—— json和xml解析 - 掘金
2 年前
大鼻子的山寨机  ·  Spring Boot之 Configuration Annotation Proessor not found in classpath解决方法_51CTO博客_spring boot?
2 年前
爱搭讪的烤面包  ·  python连接db2数据库报错1042-掘金
2 年前
听话的麻辣香锅  ·  matlab中单引号作为字符输入-掘金
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号