解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题


一般实体类中的属性, 如contentType会被hibernate默认映射为content_type,如果数据库中的字段是contenttype则会不匹配

 

这个问题有2种解决方法:

我的报错是:

 java.sql.SQLSyntaxErrorException: Table 'gaei_ms.gaei_work_task' doesn't exist

方法一:

转自:https://confluence.atlassian.com/fishkb/table-xxx-doesn-t-exist-error-with-mysql-server-302810019.html

  1.  
    2012-09-05 10:12:30,728 ERROR [btpool0-472 ] fisheye.app TotalityFilter-logExceptionDetails - Exception "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'fecru.AO_B434B9_WEB_HOOK' doesn't exist" (net.java.ao.sql.ActiveObjectSqlException) while processing "/plugins/servlet/webhooks/list" (Referer:"https://fisheye.bln.native-instruments.de/admin/viewServerSettings.do")
  2.  
    net.java.ao.sql.ActiveObjectSqlException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'fecru.AO_B434B9_WEB_HOOK' doesn't exist
  3.  
    at com.atlassian.activeobjects.internal.EntityManagedActiveObjects.find(EntityManagedActiveObjects.java:114)
  4.  
    at com.atlassian.activeobjects.osgi.DelegatingActiveObjects.find(DelegatingActiveObjects.java:71)
  5.  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  6.  
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  7.  
    ...
  8.  
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'fecru.AO_B434B9_WEB_HOOK' doesn't exist

原因:

MySQL对lower_case_table_names使用区分大小写的表名比较设置  (可能值为'0')。但是,FishEye在表名  FE-4276中不一致-数据库表OPEN的大小写不一致。您可以使用以下查询确认设置: 

show variables like 'lower_case_table_names'; 

解决:

  1.  在MySQL中设置  lower_case_table_names的值为'0'
  2. 重新启动MySQL和FishEye / Crucible。

 

方法二:

我的情况是springboot项目,配置文件的改法略有不同:

我的改法是在配置文件中加上这一行:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

以下转自:https://blog.csdn.net/Halleycomett/article/details/78638639

报错信息

  1.  
    org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
  2.  
     
  3.  
     
  4.  
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table XXX doesn't exist

报错原因调查

mysql里实际表名都是大写

尝试在entity上标记表名大写,实际测试无效,仍然找不到表

  1.  
    @Entity
  2.  
    @Data
  3.  
    @Table(name = "T_BASE_ORDER_PRINT_CLIENT")
  4.  
    public class MerchantPrinter {
  5.  
     
  6.  
    @Id
  7.  
    @Column(name = "print_client_id")
  8.  
    private String id;
  9.  
     
  10.  
    @Column(name = "merchant_id")
  11.  
    private String merchantId;
  12.  
     
  13.  
    private String imei;
  14.  
     
  15.  
    }

最终的解决方案

  1.  
    在spring jpa配置中增加physical-strategy配置解决问题
  2.  
     
  3.  
    spring:
  4.  
    datasource:
  5.  
    driver- class-name: com.mysql.jdbc.Driver
  6.  
    url: jdbc:mysql: //XXX:3306/dbname
  7.  
    username: root
  8.  
    password: *******
  9.  
    schema:
  10.  
    jpa:
  11.  
    hibernate:
  12.  
    ddl-auto: none
  13.  
    naming:
  14.  
    physical-strategy: org .hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  15.  
    show-sql: true

physical naming strategy :used to convert a “logical name” (either implicit or explicit) name of a table or column into a physical name (e.g. following corporate naming guidelines) 
physical naming strategy:物理命名策略,用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称

 

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM