【问题标题】:Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
【发布时间】:2016-07-20 14:43:51
【问题描述】:

我正在尝试将休眠 orm 映射工具配置到我的 java 类并使用 PostgreSQL 作为我的数据库并将密码配置为“密码”。当我尝试运行该应用程序时,我在控制台日志中遇到了错误 无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]。 我已经在旧版本的hibernate上尝试过这个并且它有效。我现在使用的休眠版本是 5.1.0 版。

以下是错误日志:

Mar 31, 2016 3:55:09 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.1.0.Final}
Mar 31, 2016 3:55:09 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mar 31, 2016 3:55:09 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mar 31, 2016 3:55:09 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
Mar 31, 2016 3:55:10 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Mar 31, 2016 3:55:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Mar 31, 2016 3:55:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [org.postgresql.Driver] at URL [jdbc:postgresql://localhost:5432/hibernatedb]
Mar 31, 2016 3:55:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=sa, password=****}
Mar 31, 2016 3:55:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Mar 31, 2016 3:55:10 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 1 (min=1)
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at org.javabrains.hibernate.HibernateTest.main(HibernateTest.java:18)
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:105)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:123)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:106)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:40)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:19)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:138)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:110)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:74)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
    ... 14 more
Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "sa"
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:433)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:208)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:215)
    at org.postgresql.Driver.makeConnection(Driver.java:406)
    at org.postgresql.Driver.connect(Driver.java:274)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
    ... 29 more

以下是我的hibernate.cfg.xml文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
        
        
<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="connection.url">jdbc:postgresql://localhost:5432/hibernatedb</property>
    <property name="connection.username">sa</property>
    <property name="connection.password">password</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>
    
    <!-- Names the annotated entity class-->
    <mapping class="org.javabrains.dto.UserDetails"/>
    
  </session-factory>
</hibernate-configuration>

我的 POJO 课程

package org.javabrains.dto;

import javax.persistence.Entity;

@Entity
public class UserDetails {
    
    private int userId;
    private String userName;
    
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
}

还有我的应用类:

package org.javabrains.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.javabrains.dto.UserDetails;

public class HibernateTest {

    public static void main(String[] args) {
        UserDetails user = new UserDetails();
    
        user.setUserId(1);
        user.setUserName("Tet");
        
        //Hibernate API to save this objects to DB
        //Session factory is created only ONCE
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        
        //create transaction
        session.beginTransaction();
        session.save(user);
        
        //end the transaction
        session.getTransaction().commit();
        
        //Closing the session
        session.close();
        
        
    }

}

下面是java hibernate结构图

【问题讨论】:

    标签: java hibernate postgresql jdbc orm


    【解决方案1】:

    原因:由于hibernate无法连接数据库而发生错误。
    解决方法:
    1. 请确保您在配置文件中引用的服务器上存在数据库,例如。在这种情况下为“hibernatedb”。
    2.请查看连接数据库的用户名和密码是否正确。
    3.检查连接所需的相关jar是否映射到项目中。

    【讨论】:

    • 感谢您的建议,我发现错误的数据库url(主机,名称..)导致了我这个异常。
    【解决方案2】:

    您不需要hibernate-entitymanager-xxx.jar,因为您使用的是休眠会话方法(不是JPA)。您还需要关闭SessionFactory 并在出现错误时回滚事务。但是,问题当然不在于这些。

    这是由数据库返回的

    #
    org.postgresql.util.PSQLException: FATAL: password authentication failed for user "sa"
    #
    

    您似乎提供了错误的用户名或(和)密码。

    【讨论】:

    • 此答案应标记为正确答案。这是用户或密码凭据错误的唯一原因。为答案竖起大拇指..
    • @NagaVemprala 谢谢:)
    • 就我而言,我错过了用户名并收到此错误。谢谢
    【解决方案3】:

    您遇到了数据库连接问题,或者您错过了任何用于连接数据库的休眠配置,例如数据库 DIALECT。

    如果您的数据库服务器由于网络相关问题而断开连接,则会发生这种情况。

    如果您使用 Spring Boot 以及连接到 Oracle Db 的休眠,请使用

    hibernate.dialect=org.hibernate.dialect.HSQLDialect
    hibernate.show_sql=true
    hibernate.hbm2ddl.auto=update
    hibernate.generate_statistics=true
    entitymanager.packagesToScan: com
    

    【讨论】:

    • 赞成,我错过了解决我的 SQL 服务器问题的方言设置
    【解决方案4】:

    升级MySql驱动到Connector/Python 8.0.17或大于8.0.17,使用大于MySQL 5.5版本的人

    【讨论】:

      【解决方案5】:

      我正在使用 Eclipse mars、Hibernate 5.2.1、Jdk7 和 Oracle 11g。

      我在运行 Hibernate 代码生成工具时遇到了同样的错误。我想这是一个版本问题,因为我已经通过在我的 Hibernate 控制台配置的类型框中选择 Hibernate 版本(5.1 到 5.0)来解决它。

      【讨论】:

        【解决方案6】:

        您忘记了 userId 上方的@ID

        【讨论】:

          【解决方案7】:

          我遇到同样的错误并更改以下内容

          SessionFactory sessionFactory =
              new Configuration().configure().buildSessionFactory();
          

          到这里

          SessionFactory sessionFactory =
              new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
          

          为我工作。

          【讨论】:

          • configure(...)的参数类型很多(File,URL,Path),所以不需要固定位置hibernate.cfg.xml,他也没有提到hibernate.cfg.xml文件位置。
          【解决方案8】:

          您必须停止另一个涉及特殊数据库表的正在运行的应用程序... 就像在其他模块或其他项目中运行java API没有终止..所以终止运行。

          【讨论】:

            【解决方案9】:

            我在使用 MySQL 作为我的数据库时遇到了这个错误,唯一的解决方案是重新安装 MySQL 的所有组件,因为之前我只安装了服务器。

            所以尝试下载其他版本的 PostgreSQL 并获取所有组件

            【讨论】:

              【解决方案10】:

              在我的例子中,提供的用户名对数据库没有权限。授予权限已解决问题。

              【讨论】:

                猜你喜欢
                • 2021-02-23
                • 2017-03-27
                • 1970-01-01
                • 1970-01-01
                • 2020-10-13
                • 1970-01-01
                • 2017-09-18
                • 2020-01-28
                • 2018-05-25
                相关资源
                最近更新 更多