Java 无法使用JPA获得到DB的连接-缺少derby嵌入式驱动程序类
我正在尝试使用jpa创建本地derby数据库。作为JPA实现,我使用openjpa和作为sql实现的derby 这是persistence.xml: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
<?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>