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


这个问题有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:物理命名策略,用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称


免责声明!

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



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