【问题标题】:Hibernate: PostgreSQL Driver issue休眠:PostgreSQL 驱动程序问题
【发布时间】:2016-11-19 12:49:03
【问题描述】:

我知道已经有类似的问题,但那里的答案对我没有帮助。那么请你介意看看我的具体问题吗?

我对 Hibernate 还不是很有经验,在尝试使用 Hibernate 4.3 和 PostgreSQL 为我的本地数据库创建测试数据时遇到问题。

我有另一个项目,我以完全相同的方式执行此操作并且它在那里工作,所以我做了完全相同的设置,但使用另一个数据库,但现在在我当前的项目中出现以下异常:

exception.DBException: Could not configure Hibernate!
    at dao.BenutzerDAO.<init>(BenutzerDAO.java:48)
    at export.ExportDBSchema.main(ExportDBSchema.java:16)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.postgresql.Driver]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:245)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:200)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:156)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:95)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
    at dao.BenutzerDAO.<init>(BenutzerDAO.java:45)
    ... 1 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.postgresql.Driver
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:230)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:242)
    ... 15 more

我搜索了可能的解决方案,但没有一个对我有用:

-)在 Manifest.mf 中指定 jar 的 Classpath -> 不起作用 -) 将 postgresql-9.4.1208.jre6.jar 放在 WEB-INF 下的 lib 文件夹中 -> 没有用 -)在Configuration().configure()中指定hibernate.cfg.xml文件; -> 没用

我用的是 Glassfish 4.1,org.postgres.Driver.class 已经存在,为什么找不到呢?

我的hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/Testdb</property>
    <property name="hibernate.connection.username">username</property>
    <property name="hibernate.hbm2ddl.auto">create-drop</property>
    <property name="hibernate.connection.password">password</property>
    <mapping class="entity.Benutzer"/>
  </session-factory>
</hibernate-configuration>

发生异常的DAO类中的方法:

try {
            if (sessionFactory == null) {
                Configuration conf = new Configuration().configure();

                StandardServiceRegistryBuilder builder
                        = new StandardServiceRegistryBuilder();
                builder.applySettings(conf.getProperties());

                sessionFactory = conf.buildSessionFactory(builder.build());
            }
        } catch (Throwable ex) {
            throw new DBException("Could not configure Hibernate!", ex);
        }

我会非常感谢每一个答案。

【问题讨论】:

    标签: java database postgresql hibernate driver


    【解决方案1】:

    如果你使用的是 maven 或 gradle。

    你可以将它添加到你的 pom.xml 中用于 maven

    <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.4</version>
    </dependency>
    

    这对于 gradle

    // https://mvnrepository.com/artifact/org.postgresql/postgresql
    compile group: 'org.postgresql', name: 'postgresql', version: '42.2.4'
    

    【讨论】:

      【解决方案2】:

      你很接近!

      您需要将postgresql-&lt;version&gt;.jar 直接放在servlet 容器lib 文件夹中。
      例如,如果您正在使用 Apache Tomcat,只需将您的 jar 放到 &lt;TOMCAT_ROOT&gt;/lib 下,您就应该准备就绪了。

      【讨论】:

      • 感谢您的回答。不幸的是,它仍然抛出异常 java.lang.ClassNotFoundException:无法加载请求的类:org.postgresql.Driver。我试图将 jar 放在我可以在我的项目和服务器文件夹中找到的每个 lib 文件夹中,但它也不起作用
      • 在此期间问题可以得到解决。它与罐子的位置有关,但我真的不知道这次我做了什么不同,但现在它起作用了:) 再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2013-03-09
      • 1970-01-01
      • 2016-02-15
      • 2013-06-30
      • 2012-09-17
      相关资源
      最近更新 更多