2012-11-13 119 views
2

我有一个使用Hibernate的Eclipse插件。我使用的Hibernate jar是我安装的JBOSS Tools插件的一部分。我迁移到Eclipse 4.2 Juno并更新了我的JBOSS Tools for Juno。休眠没有找到适合jdbc的驱动程序

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

我有加载动态JDBC驱动程序的代码。我使用扩展URLClassLoader的类加载jar,并使用DriverManager注册一个假驱动程序。接下来,我建SessionFactory的,则得到会议,则交易

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

当我打电话

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

我能得到Connection对象回来,但时我打电话给会话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来获取连接。任何线索?

感谢您的帮助!

回答

0

提供在休眠数据库连接是使用配置()的标准方法。配置()。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/

+0

感谢您的回复。我没有物理地使用hibernate.cfg.xml,但是我通过编程创建了它,并将所有数据库的东西放在那里。我认为这很好。我的旧代码至少适用于Hibernate 3.4。我更新到Eclipse 4.2,我认为它使用Hibernate 3.6。出于某种原因,它不再工作。我想问题是Hibernate没有看到我使用我的ClassLoader动态加载的驱动程序。 – Che

0

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

相关问题