2

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

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

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

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 来获取连接。有什么线索吗?

感谢你们的帮助!

4

2 回答 2

0

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

于 2012-11-15T20:34:02.293 回答
0

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

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

重要提示:您需要将文件 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/

于 2012-11-13T20:43:35.877 回答