如何在 Hibernate 中使用 DB2 JDBC 驱动程序

Posted

技术标签:

【中文标题】如何在 Hibernate 中使用 DB2 JDBC 驱动程序【英文标题】:How to use DB2 JDBC driver with Hibernate 【发布时间】:2016-11-11 10:10:39 【问题描述】:

我不断得到

java.lang.ClassNotFoundException:无法加载请求的类:com.ibm.db2.jcc.DB2Driver

尝试使用 Hibernate 连接到 DB2 数据库时。驱动 jar 被引用为外部库:

Image of Eclipse's "Referenced Library" folder

它也出现在类路径中:

classpathentry kind="lib" path="C:/Program Files (x86)/IBM/SQLLIB/java/db2jcc.jar"/>

我还可以通过在源代码中导入该类来访问它。我的persistence.xml 如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   <persistence-unit name="name" transaction-type="RESOURCE_LOCAL">
      <description>Persistence Unit</description>
      <provider>org.hibernate.ejb.HibernatePersistence</provider>

      <class>MyClass</class>

      <properties>
         <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
         <property name="javax.persistence.jdbc.url" value="jdbc:db2://url" />         
         <property name="javax.persistence.jdbc.user" value="user" />
         <property name="javax.persistence.jdbc.password" value="password" />
         <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />

         <property name="hibernate.hbm2ddl.auto" value="create" />
         <property name="hibernate.show_sql" value="false" />
         <property name="hibernate.format_sql" value="true" />         
      </properties>
   </persistence-unit>
</persistence>

我怀疑为什么这不起作用是该类包含在外部库中而不是作为 Maven 依赖项,因为当我将 DB2 驱动程序替换为 net.ucanaccess.jdbc.UcanaccessDriver(包含在 Maven 包中)时,该类会被发现就好了。

知道我在这里做错了什么吗?

【问题讨论】:

【参考方案1】:

当您使用 com.ibm.db2.jcc.DB2Driver' 时,请确保 db2jcc.jardb2jcc_license_cu.jar 在您的类路径中。请在您的类路径中添加这两个 jar 并试一试。

【讨论】:

不幸的是,这没有帮助,仍然是同样的错误。 将这两个 jar 作为外部 jar 添加到您的项目中 验证您的 persistence.xml 文件属性。 【参考方案2】:

问题是我使用 Maven exec 插件来运行主类。不使用 Maven,它工作正常...

【讨论】:

以上是关于如何在 Hibernate 中使用 DB2 JDBC 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

hibernate4使用原生jdbc进行批处理

hibernate中数据库方言

hibernate初探之接口说明,session使用

使用 Hibernate 将 Java 应用程序从 DB2 迁移到 BigQuery 时出现错误“找到:int64,预期:整数”

使用JBoss AS 7连接到DB2 db的JPA-Hibernate:HHH000183:没有为查询类找到持久化类

使用 Data Direct DB2 JDBC 驱动程序更新/插入未记录表的查询