Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用JPA获得到DB的连接-缺少derby嵌入式驱动程序类_Java_Maven_Jpa_Database Connection_Derby - Fatal编程技术网

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

Java 无法使用JPA获得到DB的连接-缺少derby嵌入式驱动程序类,java,maven,jpa,database-connection,derby,Java,Maven,Jpa,Database Connection,Derby,我正在尝试使用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" xmln

我正在尝试使用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
}
publicstaticvoidmain(字符串[]args)
{
Persistence.generateSchema(“数据层”,null);
EntityManagerFactory=Persistence.createEntityManagerFactory(“数据层”);

EntityManager=factory.createEntityManager();//发现
org.apache.derby.jdbc.EmbeddedDriver
类不在
derby
artifactid依赖项中(它有derby和derbyshared jar)。它在derbytools中,因此包括derbytools来解决缺少
EmbeddedDriver
类的问题:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbytools</artifactId>
    <version>10.15.2.0</version>
</dependency>

org.apache.derby
德比工具
10.15.2.0

使用Debry 10.15.2.0,嵌入式驱动程序位于Derbytools.jar中。因此必须位于库和类路径中。创建了一个新的驱动程序(我删除了所有说明嵌入式内容的驱动程序)。在“服务”选项卡中,右键单击驱动程序并创建新的。添加Derbytools.jar突出显示它,然后单击“查找”按钮。给它一个有意义的名称,它就会按预期工作。只是为了确保我还添加了Derby.jar和DerbyShared.jar以避免出现问题。

注意,您使用的是Derby 10.15,但您的问题表明您正在从Derb读取文档y版本10.4和10.8,非常旧。在你发布的错误消息中,它说“EmbeddeasddDriver”--这个值是什么,它是如何达到的?这是一个线索吗?@BryanPendleton哦,我的…对不起,我编辑了这个问题。我写了那个“asd”可能是错误的。我检查了那些文档10.15,替换了它们,但是连接的内容保持不变。很好,有意义。尝试获取异常的完整任务跟踪。我不太熟悉Maven的工作,但我怀疑您的类路径中没有正确的JAR。特别是,您可能是mi正在使用derbyshared.jar。请阅读此处的DERBY-6945发行说明:@BryanPendleton我已将我的异常的完整堆栈跟踪包含在问题中。根异常是EmbeddedDriver类丢失,因为您怀疑我的类apth中没有正确的jar。更改了问题名称。但是,我已在persistence.xml中指定了该类,并且包含Maven依赖项:/I认为您的“artifactid”是错误的。我认为“derbyclient”用于Derby的客户机-服务器网络配置。由于您使用的是Derby的嵌入式配置,请尝试将“Derby”指定为artifactid。很高兴您找到了答案!OP使用maven来管理依赖项;您似乎在描述如何在某个IDE中添加依赖项,这是与问题无关。不过,您的解决方案(添加derbytools)的要点是正确的,但Wortig已经明白了这一点。
<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>
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbytools</artifactId>
    <version>10.15.2.0</version>
</dependency>