【问题标题】:Hibernate cannot see OJDBC6 driverHibernate 看不到 OJDBC6 驱动程序
【发布时间】:2016-02-12 18:23:15
【问题描述】:

我的项目有问题,我尝试在不使用 hibernate.cfg.xml 文件的情况下配置 hibernate,我是这样做的:

  private SessionFactory buildSessionFactory() {
    try {
        System.out.println(hostname);
        System.out.println(username);
        System.out.println(password);
        // Create the SessionFactory from hibernate.cfg.xml
        return new Configuration()
                .addAnnotatedClass(DBUser.class)
                .addAnnotatedClass(DBTrustee.class)
                .addAnnotatedClass(DBTrusteeUser.class)
                .setProperty("hibernate.show_sql", "true")
                .setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver")
                .setProperty("connection.url", "jdbc:oracle:thin:@"+hostname)
                .setProperty("connection.username", username)
                .setProperty("connection.password", password)
                .setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect")
                .setProperty("hibernate.default_schema", "apps")
                .buildSessionFactory();
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

它看不到我的构建路径中的 OJDBC6 驱动程序,当我使用 hibernate.cfg.xml 文件时可以看到,但是当我尝试避免使用文件时,我得到了这个:

警告:HHH000181:没有遇到合适的连接提供程序,假设应用程序将提供连接 2016 年 12 月 12 日下午 7:26:06 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator 启动服务 警告:HHH000342:无法获得查询元数据的连接:应用程序必须提供 JDBC 连接 2016 年 12 月 12 日下午 7:26:06 org.hibernate.dialect.Dialect

我做错了什么?我尝试使用这两个 jdbc 驱动程序类: oracle.jdbc.driver.OracleDriver 和 oracle.jdbc.OracleDriver

仍然没有运气:(

【问题讨论】:

  • provider 和驱动不一样,需要检查驱动不是问题是provider
  • 所以这是我之前使用 xml 文件的尝试:<session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@ip</property> <property name="hibernate.connection.username"></property> <property name="hibernate.connection.password"></property> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="hibernate.default_schema">apps</property> <property name="show_sql">true</property> 它工作得很好...... :( 没有提供者。

标签: java spring oracle hibernate jdbc


【解决方案1】:

我最后一次尝试,使用 hibernate 5,从它说的 API 和手册中获取。

protected void setUp() throws Exception {
    // A SessionFactory is set up once for an application!
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
            .applySettings(configuration.getProperties() // configures settings from Configuration object
            .build();
    try {
        sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
    }
    catch (Exception e) {
        // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
        // so destroy it manually.
        StandardServiceRegistryBuilder.destroy( registry );
    }

This 是 hibernate 5 的快速入门,而不是单独调用 configure,您需要传递您使用属性创建的配置对象。

【讨论】:

  • 首先,据我所知,configure() 方法会查找 hibernate.cfg.xml 文件,因为在尝试执行它时会引发异常。其次,就我所读到的而言,ServiceRegistry 和 ServiceRegistryBuilder 已被弃用 - 在最新的休眠中没有这样的类 ServiceRegistryBuilder,我正在使用这个:<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.0.7.Final</version> </dependency>
  • 使用 javadoc hibernat5 docs.jboss.org/hibernate/orm/5.0/javadocs在我的回复中进行了更新
  • 还是不行,控制台输出还是一样,找不到ojdbc6驱动,这里是全类:link我尝试在HibernateUtil类的构造函数中运行setUp方法,然后 getSessionFactory 与 getter。我相信我按照你说的做了……
  • 您确定驱动程序在类路径或 lib 文件夹中吗?尝试使用 Class.forName(oracle.jdbc.driver.OracleDriver").newInstance(); 运行一些测试,在同一个类中查看驱动程序是否在类路径中,如果出现 ClassNotFoundException,我们就有麻烦了,驱动程序将在运行时类路径中,有时与编译类路径不同
  • 我敢肯定,因为它按照我之前发布的 xml 中的说明工作。我非常感谢您的帮助。如果您想亲眼看看,我什至可以邀请您参加 teamviewer 会议。编辑:是的,我确实尝试过 Class.forName(oracle.jdbc.driver.OracleDriver").newInstance(); 在同一个类中,它没有抛出异常,你知道有什么问题吗?
【解决方案2】:

我找到了解决办法:

改变这个:

.setProperty("connection.url", "jdbc:oracle:thin:@"+hostname)
.setProperty("connection.username", username)
.setProperty("connection.password", password)

到这里:

.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@"+hostname)
.setProperty("hibernate.connection.username", username)
.setProperty("hibernate.connection.password", password)

解决了这个问题。也许这会对将来的某人有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 2014-10-20
    • 1970-01-01
    • 2011-04-12
    • 2011-12-22
    • 2015-10-08
    • 2020-03-13
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多