前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
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.4K0
发布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) {

        String tableName = name.getText().toUpperCase();
        return name.toIdentifier(tableName);
    }

}

2)在对应配置文件中 使用自己实现的策略

代码语言:javascript
复制
spring.jpa.hibernate.naming.physical-strategy=com.xxx.xxx.util.MySQLUpperCaseStrategy

参考:

https://blog.csdn.net/q979076061/article/details/51539960

https://blog.csdn.net/jiangyu1013/article/details/80395579

http://blog.51cto.com/4528195/1983780

https://blog.csdn.net/holdlg/article/details/52252471

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档