Hibernate报错:MySQL未找到USERS表,无法识别users表数据
问题:应用无法识别MySQL数据库中users表的现有数据
基础信息
- 数据库名称:
nutzer - 表名称:
users(小写,非大写USERS) - 技术实现:通过Hibernate配置JPA连接MySQL
- 错误提示:
[未找到表“USERS”(该数据库为空)]
已执行的排查操作
- 反复核对表名,确认数据库中表定义为
users - 通过MySQL Workbench验证
users表中存在测试数据 - 检查JPA配置参数
相关代码片段
Entity类代码
package de.likeherotozero; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; @Entity @Table(name = "users", schema = "nutzer") public class EmissionsData { @Id private Long id; private String country; private double value; // Getters and Setters public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } }
persistence.xml配置
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="my-persistence-unit"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <class>de.likeherotozero.User</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/nutzer"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="myCorrectPassword is here"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
解决建议
- 修正Entity类与配置的匹配问题:配置文件
<class>标签指定的是de.likeherotozero.User,但实际Entity类是EmissionsData,两者不匹配导致Hibernate无法正确映射到users表,需将<class>改为de.likeherotozero.EmissionsData。 - 处理MySQL大小写敏感性:Linux系统下MySQL默认区分表名大小写,若运行环境为Linux,可在JDBC URL添加参数
?lower_case_table_names=1强制不区分大小写,示例:jdbc:mysql://localhost:3306/nutzer?lower_case_table_names=1。 - 移除冗余的schema配置:JDBC URL已指定数据库
nutzer,@Table注解中的schema="nutzer"可能造成冲突,可改为@Table(name = "users")。 - 核对Entity与表字段一致性:确认
EmissionsData的字段(id、country、value)与users表的字段名称、数据类型完全匹配,避免因字段不匹配导致Hibernate无法识别表。 - 开启SQL日志排查:在
persistence.xml中添加以下配置,查看Hibernate实际执行的SQL语句,确认查询表名是否正确:<property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/>
内容的提问来源于stack exchange,提问作者Robin Specky
相关产品推荐
相关产品推荐

