Hibernate没有为jdbc找到合适的驱动程序

时间:2012-11-13 19:58:17

标签: java hibernate classloader

我有一个使用Hibernate的Eclipse插件。我使用的Hibernate jar是我安装的JBOSS Tools插件的一部分。我迁移到Eclipse 4.2 Juno并更新了我的JBOSS Tools for Juno。

现在我的问题是,我现在的代码不再起作用了。对我来说,似乎是HIbernate和我的应用程序之间的ClassLoader问题。

我有加载动态JDBC驱动程序的代码。我使用扩展 URLClassLoader 的类加载jar并使用 DriverManager 注册假驱动程序。接下来我构建 SessionFactory ,然后获取会话,然后交易

Session hbmSession = mySessionFactory.getCurrentSession();
Transaction tx = hbmSession.getTransaction();

当我打电话给

DriverManager.getConnection(<my_jdbc_url>,<user>,<pwd>);

我能够取回Connection对象,但是当我调用Session来beginTransaction()时,它就会爆炸了

if (tx == null || !tx.isActive()) {
  tx = hbmSession.beginTransaction();
}

并抛出此错误:

Caused by: java.sql.SQLException: No suitable driver found for    
jdbc:oracle:thin:@190.255.10.10:1521:DBID
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

这很奇怪,因为它还调用DriverManager来获取连接。任何线索?

感谢你们的帮助!

2 个答案:

答案 0 :(得分:0)

在Hibernate中提供数据库连接的标准方法是使用Configuration()。configure()。buildSessionFactory()返回SessionFactory

SessionFactory对象应配置为单例。它有一个静态方法:getCurrentSession(),它返回一个hibernate Session。

重要提示:您需要将文件hibernate.cfg.xml放入类路径中。如果您使用Eclipse,则可以将此文件放入src文件夹中。

此配置文件应包含hibernate.connection.url,hibernate.connection.username和hibernate.connection.passsword

有很多例子,例如http://manikandanmv.wordpress.com/2011/04/13/hibernate-basics-simple-example/

答案 1 :(得分:0)

我找到了解决方案。看起来JBoss的Hibernatools有自己的FakeDelegatingDriver对象供客户在单独的插件包上使用。 org.hibernate.eclipse.libs我使用它而不是我自己的FakeDriver所以我可以加载动态驱动程序。