这是我在hibernate.cfg.xml
中的内容<hibernate-configuration>
<session-factory>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</property>
<property name="hibernate.connection.charSet">UTF-8</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="connection.pool_size">1</property>
<property name="show_sql">true</property>
<property name="hibernate.use_outer_join">true</property>
<property name="current_session_context_class">thread</property>
</session-factory>
</hibernate-configuration>
另外,我动态地覆盖了一些属性......
Configuration config = new Configuration().configure("path_to_hibernate.cfg.xml");
config.setProperty("hibernate.connection.url", System.getenv("HEROKU_POSTGRESQL_MYCOLOR_URL"));
config.setProperty("hibernate.connection.username", "***");
config.setProperty("hibernate.connection.password", "***");
但是,当我运行它时,我收到了这个错误......
ERROR: No suitable driver found for postgres://*******:*********@ec2-23-21-85-197.compute-1.amazonaws.com:5432/d9i5vp******o7te
如何配置我的属性以便heroku找到postgres驱动程序?
(我是hibernate和heroku的新手,所以非常感谢任何帮助:)
答案 0 :(得分:2)
您可以使用此Hibernate + JPA persistence.xml
配置作为您的hibernate配置的基础。
hibernate.cfg.xml
和persistence.xml
之间的属性名称相同,只有hibernate使用开始和结束元素,而JPA使用属性。
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://ec2-107-21-126-162.compute-1.amazonaws.com:6232/dbname?username=username&password=password&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="username"/>
<property name="hibernate.connection.password" value="password"/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="update"/>
<!-- c3p0 connection pool settings -->
<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.min_size" value="1" />
<property name="hibernate.c3p0.max_size" value="5" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.timeout" value="1800" />
</properties>
Maven dependancies:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.1.Final</version>
</dependency>
答案 1 :(得分:0)
来自Heroku Postgres的URL格式不是JDBC格式。它是一种多语言格式,因此所有平台都可以使用它。因此,您需要将URL转换为JDBC格式。在Heroku开发中心有一个很好的例子,如何做到这一点:
https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#using-the-in-plain-jdbc
答案 2 :(得分:0)
Map<String, String> jdbcUrlSettings = new HashMap<>();
String jdbcDbUrl = System.getenv("JDBC_DATABASE_URL");
System.out.println("jdbcDbUrl" + jdbcDbUrl);
if (null != jdbcDbUrl) {
jdbcUrlSettings.put("hibernate.connection.url", System.getenv("JDBC_DATABASE_URL"));
}
Configuration configuration = new Configuration();
annotatedAddClass(configuration);
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(jdbcUrlSettings);
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
return configuration.buildSessionFactory(serviceRegistry);