无法创建请求的服务

我正在尝试将hibernate orm映射工具配置为java类并使用PostgreSQL作为我的数据库并将密码配置为“密码”。 当我尝试运行应用程序时,我在控制台日志中遇到了这种错误。 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]。 我在旧版本的hibernate上试过这个并且它有效。 我现在使用的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  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  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  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.(PooledConnections.java:40) at org.hibernate.engine.jdbc.connections.internal.PooledConnections.(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.(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文件

      org.postgresql.Driver jdbc:postgresql://localhost:5432/hibernatedb sa password  1  org.hibernate.dialect.PostgreSQLDialect  thread  org.hibernate.cache.internal.NoCacheProvider  true  create     

我的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结构的图像

在此处输入图像描述

你不需要hibernate-entitymanager-xxx.jar ,因为你使用的是Hibernate会话方法(不是JPA )。 您还需要关闭SessionFactory并回滚错误事务。 但是,问题当然不是那些问题。

这是由数据库返回的

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

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

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

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

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

你忘记了userId上面的@ID

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

我得到了同样的错误并改变了以下内容

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

对此

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

为我工作。