Еще один. Через 3,5 часа я перехожу к stackoverflow, чтобы узнать, может ли кто-нибудь понять, почему эта ошибка происходит.Встраиваемый Derby с JPA: поставщик с постоянством для EntityManager Named
javax.persistence.PersistenceException: No Persistence provider for EntityManager named derby
Полное трассировку исключение состоит в следующем
javax.persistence.PersistenceException: No Persistence provider for EntityManager named derby
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at mmis.mars.irs.mec.batch.DerbyTest.setup(DerbyTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Следующие баночки ссылаются. Это JPA, eclipselink, derby и derbyclient. Я не думаю, что derbyclient нужен, но я включил его в другое сообщение о встроенном дерби с eclipselink.
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- derby.jar
- derbyclient.jar
Ниже файл persistence.xml. Он помещается внутри папки META-INF, которая находится в корневом каталоге проекта. Папка META-INF добавляется в исходную папку для проекта.
<?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="derby" transaction-type="RESOURCE_LOCAL">
<class>JPA_class1</class>
<class>JPA_class2</class>
<class>JPA_class3</class>
<class>JPA_class4</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:thedb;create=true" />
</properties>
</persistence-unit>
</persistence>
включение META-INF
- Включено: (Все)
- Исключено: (Нет)
- Native расположение библиотеки: (Нет)
- Игнорировать дополнительные проблемы компиляции: (Нет)
Как и в других сообщениях, тег провайдера не требуется д.
Я попытался включить каждый тег провайдера в нужное место. Ничего не сработало.
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
Следующее что я пробовал с тегом поставщика.
<persistence-unit name="derby" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>...</class>
<properties>
...
</properties>
</persistence-unit>
и
<persistence-unit name="derby" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>...</class>
<properties>
...
</properties>
</persistence-unit>
В настоящее время я запустить его в тест JUnit в папке «тест», который находится в корневом каталоге, а также включены в качестве исходной папки. Ошибка JUnit с ошибкой.
javax.persistence.PersistenceException: No Persistence provider for EntityManager named derby
Ниже приведена строка кода, вызывающая ошибку.
Persistence.createEntityManagerFactory("derby").createEntityManager();
Вам определенно не нужен derbyclient.jar, потому что вы используете Derby EmbeddedDriver и встроенный в Derby JDBC-синтаксис URL-адреса соединения.Можете ли вы предоставить полное исключение, а не только однострочное резюме? –
Я добавил полный backtrace. Спасибо,^_ ^. – nestharus
Вы пытались явно указать тэг 'provider' в вашем' persistence-unit'? Я не уверен, что «другие сообщения» сказали вам, что это не требуется. Единственное, что я вижу, это http://docs.oracle.com/cd/E26576_01/doc.312/e24930/jpa.htm#GSDVG00138, в котором говорится, что есть другие предпосылки, которые вы должны встретить, чтобы опустить тег 'provider'. –