我有一个带有 JPA 的小型测试应用程序,Hibernate 坚持到 Oracle XE。这一切都很好。
但是,当类路径包含 derby.jar 时,我得到一个异常,尽管我没有专门在 derby 中调用任何东西......我知道。
显然,德比正在尝试加载。但是我没有调用任何 Derby 初始化,也没有为 JPA 配置 Derby。根据 Derby 文档,“在嵌入式环境中,加载驱动程序也会启动 Derby。”
但我对德比没有任何要求。我从 persistence.xml 中删除了 derby persistence-unit。然而,随着 derby.jar 留在路径上,它爆炸了。如果我从路径中删除 derby.jar,则为 Oracle 定义的持久性单元可以正常工作。
我在 Derby 文档或在线中没有发现任何相关内容。
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40
我在类路径上有 derby.jar 的原因是我试图用两个声明(Oracle 和 Derby)定义一个 persistence.xml,这样我就可以在一个测试工具中测试这两个数据库,以证明与即将推出的项目的兼容性在便携式机器上使用 Oracle 内部和 Derby。
持久性.XML
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.gdeb.swift.NIIN</class>
<class>com.gdeb.swift.RIC</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.user" value="swift" />
<property name="javax.persistence.jdbc.password" value="swift" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="oracle.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
</properties>
</persistence-unit>
</persistence>