You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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错误,按以下步骤排查:

  1. 补充JDBC URL时区参数:MySQL 8.0强制要求指定时区,修改persistence.xml中的URL为:
    <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/pizzeria?serverTimezone=UTC&amp;useSSL=false&amp;allowPublicKeyRetrieval=true" />
    
    可根据实际时区调整serverTimezone,例如Asia/Shanghai。
  2. 验证基础数据库连接:用原生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();
            }
        }
    }
    
  3. 检查Maven依赖有效性:
    • 确认本地Maven仓库中mysql-connector-java:8.0.32和hibernate-core:5.6.15.Final已正确下载,无损坏。
    • 执行mvn clean install重新打包,确保依赖被正确引入到classpath。

三、Tomcat 9部署环境问题解决

针对部署后出现的No appropriate connection provider encountered及Hibernate版本变为5.3.6.Final的问题:

  1. 排查依赖冲突:
    • 检查Tomcat的lib目录,若存在旧版本Hibernate jar包,直接删除以避免覆盖项目依赖。
    • 若Tomcat自带Hibernate,可在pom.xml中为Hibernate依赖添加<scope>provided</scope>;否则确保maven-war-plugin将所有依赖打入war包。
  2. 修正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&amp;useSSL=false&amp;allowPublicKeyRetrieval=true" />
    <property name="javax.persistence.jdbc.username" value="root" />
    <property name="javax.persistence.jdbc.password" value="portentoso" />
    
  3. 指定Hibernate连接提供者:在persistence.xml的properties中添加:
    <property name="hibernate.connection.provider_class" value="org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl" />
    
    强制Hibernate使用内置连接池,避免自动选择异常。

四、额外验证点

  • 确认MySQL服务正在运行,防火墙未阻止3306端口。
  • 检查MySQL用户root是否拥有localhost访问权限(执行SELECT user,host FROM mysql.user;验证)。
  • 确认Hibernate 5.6.15.Final与Java 17兼容(该版本已支持Java 17)。

内容的提问来源于stack exchange,提问作者idronick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:12:02