我有一个使用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来获取连接。任何线索?
感谢你们的帮助!
答案 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所以我可以加载动态驱动程序。