调用Persistence.createEntityManagerFactory()时数据库连接异常求助
数据库连接异常排查与解决
一、修正配置中的明显错误
- persistence.xml拼写错误:将
<property name = "hibernate.format_sq" value = "true" />改为<property name="hibernate.format_sql" value="true" />,拼写错误可能导致配置加载异常。
二、本地运行环境问题解决
针对本地运行时的Cannot get a connection as the driver manager is not properly initialized错误,按以下步骤排查:
- 补充JDBC URL时区参数:MySQL 8.0强制要求指定时区,修改persistence.xml中的URL为:
可根据实际时区调整<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/pizzeria?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true" />serverTimezone,例如Asia/Shanghai。 - 验证基础数据库连接:用原生JDBC代码测试连接,排除数据库服务、端口、用户名密码问题:
import java.sql.Connection; import java.sql.DriverManager; public class TestConnection { public static void main(String[] args) { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/pizzeria?serverTimezone=UTC", "root", "portentoso" ); System.out.println("连接成功"); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } - 检查Maven依赖有效性:
- 确认本地Maven仓库中
mysql-connector-java:8.0.32和hibernate-core:5.6.15.Final已正确下载,无损坏。 - 执行
mvn clean install重新打包,确保依赖被正确引入到classpath。
- 确认本地Maven仓库中
三、Tomcat 9部署环境问题解决
针对部署后出现的No appropriate connection provider encountered及Hibernate版本变为5.3.6.Final的问题:
- 排查依赖冲突:
- 检查Tomcat的
lib目录,若存在旧版本Hibernate jar包,直接删除以避免覆盖项目依赖。 - 若Tomcat自带Hibernate,可在pom.xml中为Hibernate依赖添加
<scope>provided</scope>;否则确保maven-war-plugin将所有依赖打入war包。
- 检查Tomcat的
- 修正persistence.xml属性前缀:Tomcat 9属于Java EE环境,Hibernate 5.3.x更适配
javax.persistence前缀,修改属性如下:<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/pizzeria?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true" /> <property name="javax.persistence.jdbc.username" value="root" /> <property name="javax.persistence.jdbc.password" value="portentoso" /> - 指定Hibernate连接提供者:在persistence.xml的properties中添加:
强制Hibernate使用内置连接池,避免自动选择异常。<property name="hibernate.connection.provider_class" value="org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl" />
四、额外验证点
- 确认MySQL服务正在运行,防火墙未阻止3306端口。
- 检查MySQL用户
root是否拥有localhost访问权限(执行SELECT user,host FROM mysql.user;验证)。 - 确认Hibernate 5.6.15.Final与Java 17兼容(该版本已支持Java 17)。
内容的提问来源于stack exchange,提问作者idronick
相关产品推荐
相关产品推荐

