一般實體類中的屬性, 如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
-
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")
-
net.java.ao.sql.ActiveObjectSqlException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'fecru.AO_B434B9_WEB_HOOK' doesn't exist
-
at com.atlassian.activeobjects.internal.EntityManagedActiveObjects.find(EntityManagedActiveObjects.java:114)
-
at com.atlassian.activeobjects.osgi.DelegatingActiveObjects.find(DelegatingActiveObjects.java:71)
-
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
-
...
-
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';
解決:
- 在MySQL中設置 lower_case_table_names的值為'0'
- 重新啟動MySQL和FishEye / Crucible。
方法二:
我的情況是springboot項目,配置文件的改法略有不同:
我的改法是在配置文件中加上這一行:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
以下轉自:https://blog.csdn.net/Halleycomett/article/details/78638639
報錯信息
-
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
-
-
-
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table XXX doesn't exist
報錯原因調查
mysql里實際表名都是大寫
嘗試在entity上標記表名大寫,實際測試無效,仍然找不到表
-
-
-
-
public class MerchantPrinter {
-
-
-
-
private String id;
-
-
-
private String merchantId;
-
-
private String imei;
-
-
}
最終的解決方案
-
在spring jpa配置中增加physical-strategy配置解決問題
-
-
spring:
-
datasource:
-
driver- class-name: com.mysql.jdbc.Driver
-
url: jdbc:mysql: //XXX:3306/dbname
-
username: root
-
password: *******
-
schema:
-
jpa:
-
hibernate:
-
ddl-auto: none
-
naming:
-
physical-strategy: org .hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
-
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:物理命名策略,用於轉換“邏輯名稱”(隱式或顯式)的表或列成一個物理名稱