有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用缺少的JPA derby嵌入式驱动程序类获得到DB的连接

我正在尝试使用jpa创建本地derby数据库。作为JPA实现,我使用openjpa和作为sql实现的derby

这就是坚持。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。阿帕奇。德比。jdbc。嵌入式驱动程序

我已经在持久性中指定了EmbeddedDriver。xml,还包括Maven依赖项

根据derby的文档,我认为我的连接url和驱动程序是正确的:

包含的依赖项(使用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


共 (2) 个答案

  1. # 1 楼答案

    发现org.apache.derby.jdbc.EmbeddedDriver类不在derbyartifactid依赖项中(它有derby和derbyshared jar)。它位于derbytools中,因此包括derbytools以解决abbout missing EmbeddedDriver类的依赖性问题:

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbytools</artifactId>
        <version>10.15.2.0</version>
    </dependency>
    
  2. # 2 楼答案

    使用Debry 10.15.2.0,嵌入式驱动程序位于Derbytools中。罐子因此必须在库和类路径中。创建了一个新的驱动程序(我删除了所有嵌入任何内容的驱动程序)。在“服务”选项卡中,右键单击驱动程序并创建新的。添加Derbytools。jar高亮显示它并单击Find按钮。给它起一个有意义的名字,它就会按预期工作。当然我也加入了德比。jar和DerbyShared。为了避免问题