3

很抱歉打扰你,但我一直收到错误,我真的不明白为什么。

如标题中所述,我正在尝试使用休眠连接运行 heroku 的 postgresql 数据库。我的应用也在 Heroku 上运行。

它在本地模式下工作,我尝试了几个 postgre 驱动程序。

这是我的 hibernate.cfg.xml :

<!-- PostgreSQL -->

<property name="connection.url">jdbc:postgresql://paafeblgkhhbkx:PhZEtHl2RHwbWDQJJOurmej89-@ec2-54-243-243-252.compute-1.amazonaws.com:5432/d1vsgjgnfr1koq</property>

<property name="connection.username">paafeblgkhhbk</property>

<property name="connection.password">My password</property>

<property name="connection.driver_class">org.postgresql.Driver</property>

<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</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>

当我获得会话时,url、密码和用户名被覆盖:

Configuration configuration = new Configuration();
configuration.addAnnotatedClass(Client.class);
// and other classes

try {  
    Class.forName("org.postgresql.Driver"); 
    System.out.println(" === === DRIVER FOUND === === ");   
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    System.out.println(" === === DRIVER NOT FOUND === === ");
}
configuration.configure();
System.out.println("============================= EXPORT SCHEMA ==========================");
new SchemaExport(configuration).create(true, true);
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

如您所见,找到了驱动程序。我很确定网址也可以(如果我尝试使用另一个网址,我会收到连接错误)

这是我的依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.1.9.Final</version>
</dependency>
<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.1-901.jdbc4</version>
</dependency>

并且它们按照我的 pom 中的说明导出(当我部署我的应用程序时,我可以看到 maven 正在复制它):

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
    <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals><goal>copy-dependencies</goal></goals>
    </execution>
</executions>
</plugin>

所以在这一点上我看不出我做错了什么:/

这是我得到的错误日志:

使用命令启动进程java -cp target/classes:target/dependency/* test.Server

状态从开始变为向上

org.hibernate.annotations.common.Version

信息:HCANN000001:Hibernate Commons Annotations {4.0.1.Final}

org.hibernate.Version logVersion

信息:HHH000412:休眠核心 {4.1.9.Final}

org.hibernate.cfg.Environment

信息:HHH000206:找不到 hibernate.properties

org.hibernate.cfg.Environment buildBytecodeProvider

信息:HHH000021:字节码提供程序名称:javassist

org.hibernate.cfg.Configuration 配置

信息:HHH000043:从资源配置:/hibernate.cfg.xml

org.hibernate.cfg.Configuration getConfigurationInputStream

信息:HHH000040:配置资源:/hibernate.cfg.xml

org.hibernate.cfg.Configuration doConfigure

信息:HHH000041:配置的 SessionFactory:空

=== === 找到驱动程序 === ===

============================== 导出模式 =================== =======

org.hibernate.dialect.方言

信息:HHH000400:使用方言:org.hibernate.dialect.PostgreSQLDialect

org.hibernate.tool.hbm2ddl.SchemaExport 执行

信息:HHH000227:运行 hbm2ddl 模式导出

org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置

信息:HHH000402:使用 Hibernate 内置连接池(不用于生产!)

org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置

信息:HHH000115:休眠连接池大小:2

org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置

信息:HHH000006:自动提交模式:假

org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置

信息:HHH000401:在 URL [jdbc:postgresql://paafeblgkhhbkx:PhZEtHl2RHwbWDQJJOurmej89-@ec2-54-243-243-252.compute-1.amazonaws.com:5432/d1vsgjgnfr1koq] 使用驱动程序 [org.postgresql.Driver]

org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl 配置

信息:HHH000046:连接属性:{用户=paafeblgkhhbkx,密码= * *}

org.hibernate.tool.hbm2ddl.SchemaExport 执行

错误:HHH000231:架构导出不成功

java.sql.SQLException:找不到适合 jdbc 的驱动程序:postgresql://paafeblgkhhbkx:PhZEtHl2RHwbWDQJJOurmej89-@ec2-54-243-243-252.compute-1.amazonaws.com:5432/d1vsgjgnfr1koq

在 java.sql.DriverManager.getConnection(DriverManager.java:640)

在 java.sql.DriverManager.getConnection(DriverManager.java:169)

在 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)

在 org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:55)

在 org.hibernate.tool.hbm2ddl.DatabaseExporter.(DatabaseExporter.java:52)

在 org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367)

在 org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304)

在 org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293)

在persistance.SessionFactorySingleton.configureSessionFactory(SessionFactorySingleton.java:36)

在persistance.SessionFactorySingleton.getSessionFactory(SessionFactorySingleton.java:61)

在persistance.Controller.beginSession(Controller.java:24)

在persistance.Controller.sauvegarde(Controller.java:36)

在persistance.Controller.save(Controller.java:51)

在 test.Server$1.handle(Server.java:44)

在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:83)

在 sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)

在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:86)

在 sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:589)

在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:83)

在 sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:561)

在 sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:137)

在 sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:367)

在 sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:339)

在 java.lang.Thread.run(Thread.java:679)

谢谢你的时间 !

4

1 回答 1

7

您的数据库 URL 有一些非常可疑的地方:

jdbc:postgresql://paafeblgkhhbkx:PhZEtHl2RHwbWDQJJOurmej89-@ec2-54-243-243-252.compute-1.amazonaws.com:5432/d1vsgjgnfr1koq

分解:

  • JDBC 方案:postgresql- 好的
  • 主机名:paafeblgkhhbkx– 可疑
  • 港口:PhZEtHl2RHwbWDQJJOurmej89-@ec2-54-243-243-252.compute-1.amazonaws.com——肯定错了。

您显然试图将用户名和密码作为连接 URL 的一部分,但这不是它的完成方式。这些是使用单独的属性配置的,如果要将它们包含在 URI 中,方法如下

jdbc:postgresql://localhost/test?user=fred&password=secret


附带说明一下,我已成功连接到您的数据库,因此除了正确的主机名外,我还可以证明您向公众公开的凭据的正确性。是时候改密码了……

于 2013-02-10T14:08:49.810 回答