无法使用 JPA 获取与数据库的连接 - 缺少德比嵌入式驱动程序 class
Can not obtain connection to DB using JPA - derby embedded driver class missing
我正在尝试使用 jpa 创建本地 derby 数据库。作为 JPA 实现,我正在使用 openjpa,作为 sql 实现 derby。
这是persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="DataLayer"
transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>DataSource</non-jta-data-source>
<properties>
<property
name="javax.persistence.schema-generation.database.action"
value="create" />
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:testdb" />
</properties>
</persistence-unit>
</persistence>
这是我的主要内容:
public static void main(String[] args)
{
Persistence.generateSchema("DataLayer", null);
EntityManagerFactory factory = Persistence.createEntityManagerFactory("DataLayer");
EntityManager manager = factory.createEntityManager(); // <- Exception here
}
这是我得到的异常的开始部分:
Exception in thread "main" <openjpa-3.1.2-r66d2a72 nonfatal general error> org.a
pache.openjpa.persistence.PersistenceException: There were errors initializing y
our configuration: <openjpa-3.1.2-r66d2a72 fatal user error> org.apache.openjpa.
util.UserException: A connection could not be obtained for driver class "org.apa
che.derby.jdbc.EmbeddedDriver" and URL "jdbc:derby:testdb". You may have spe
cified an invalid URL.
...
说我可能指定了一个无效的 URL。
完整的堆栈跟踪:https://justpaste.it/3kmgo
根例外:java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver
我在persistence.xml中指定了EmbeddedDriver,也包含了Maven依赖。
此外,根据有关德比的文档,我认为我的连接 url 和驱动程序是正确的:
- https://db.apache.org/derby/docs/10.15/devguide/rdevdvlp22102.html#rdevdvlp22102
- https://db.apache.org/derby/docs/10.15/devguide/cdevdvlp40653.html
包含的依赖项(使用 Maven):
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.15.2.0</version>
</dependency>
我试图将 属性 javax.persistence.jdbc.url
更改为 jdbc:derby:testdb;create=true
,但同样的异常。还尝试将 javax.persistence.schema-generation.database.action
属性 设置为 none
.
发现 org.apache.derby.jdbc.EmbeddedDriver
class 不在 derby
artifactid 依赖项中(它有 derby 和 derbyshared jar)。它在 derbytools 中,因此将 derbytools 添加到依赖项中可以解决缺少 EmbeddedDriver
class:
的问题
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbytools</artifactId>
<version>10.15.2.0</version>
</dependency>
使用 Debry 10.15.2.0,嵌入式驱动程序位于 Derbytools.jar。因此必须在您的库和类路径中。创建了一个新的驱动程序(我删除了所有说嵌入式的驱动程序)。在“服务”选项卡中,右键单击“驱动程序”并“新建”。添加 Derbytools.jar 突出显示它并单击“查找”按钮。给它起一个有意义的名字,它就会按预期工作。为了确保我还添加了 Derby.jar 和 DerbyShared.jar 以避免出现问题。
我正在尝试使用 jpa 创建本地 derby 数据库。作为 JPA 实现,我正在使用 openjpa,作为 sql 实现 derby。
这是persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="DataLayer"
transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>DataSource</non-jta-data-source>
<properties>
<property
name="javax.persistence.schema-generation.database.action"
value="create" />
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:testdb" />
</properties>
</persistence-unit>
</persistence>
这是我的主要内容:
public static void main(String[] args)
{
Persistence.generateSchema("DataLayer", null);
EntityManagerFactory factory = Persistence.createEntityManagerFactory("DataLayer");
EntityManager manager = factory.createEntityManager(); // <- Exception here
}
这是我得到的异常的开始部分:
Exception in thread "main" <openjpa-3.1.2-r66d2a72 nonfatal general error> org.a
pache.openjpa.persistence.PersistenceException: There were errors initializing y
our configuration: <openjpa-3.1.2-r66d2a72 fatal user error> org.apache.openjpa.
util.UserException: A connection could not be obtained for driver class "org.apa
che.derby.jdbc.EmbeddedDriver" and URL "jdbc:derby:testdb". You may have spe
cified an invalid URL.
...
说我可能指定了一个无效的 URL。
完整的堆栈跟踪:https://justpaste.it/3kmgo
根例外:java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver
我在persistence.xml中指定了EmbeddedDriver,也包含了Maven依赖。
此外,根据有关德比的文档,我认为我的连接 url 和驱动程序是正确的:
- https://db.apache.org/derby/docs/10.15/devguide/rdevdvlp22102.html#rdevdvlp22102
- https://db.apache.org/derby/docs/10.15/devguide/cdevdvlp40653.html
包含的依赖项(使用 Maven):
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.15.2.0</version>
</dependency>
我试图将 属性 javax.persistence.jdbc.url
更改为 jdbc:derby:testdb;create=true
,但同样的异常。还尝试将 javax.persistence.schema-generation.database.action
属性 设置为 none
.
发现 org.apache.derby.jdbc.EmbeddedDriver
class 不在 derby
artifactid 依赖项中(它有 derby 和 derbyshared jar)。它在 derbytools 中,因此将 derbytools 添加到依赖项中可以解决缺少 EmbeddedDriver
class:
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbytools</artifactId>
<version>10.15.2.0</version>
</dependency>
使用 Debry 10.15.2.0,嵌入式驱动程序位于 Derbytools.jar。因此必须在您的库和类路径中。创建了一个新的驱动程序(我删除了所有说嵌入式的驱动程序)。在“服务”选项卡中,右键单击“驱动程序”并“新建”。添加 Derbytools.jar 突出显示它并单击“查找”按钮。给它起一个有意义的名字,它就会按预期工作。为了确保我还添加了 Derby.jar 和 DerbyShared.jar 以避免出现问题。