Исключение JPA: нет поставщика сохраняемости для EntityManager с именем MyJPAApplicationPU - PullRequest
3 голосов
/ 10 июля 2010

Я новичок в JPA.Я пытаюсь запустить пример кода с использованием JPA, но получаю следующее исключение:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU

Я разместил здесь свое сообщение об исключении,

INFO: Could not find any META-INF/persistence.xml file in the classpath
javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
        at com.myJpa.TestJPA.setUp(TestJPA.java:30)
        at com.myJpa.TestJPA.main(TestJPA.java:72)

Любая помощь будет принята.

Ответы [ 3 ]

5 голосов
/ 10 июля 2010

Ну, ошибка самоочевидна, вам нужно предоставить META-INF/persistence.xml для использования JPA.Этот файл используется для определения «единицы сохраняемости».Из спецификации JPA 1.0:

6.2.1 файл persistence.xml

Файл persistence.xml определяет единицу сохранения.Он может использоваться для указания управляемых классов персистентности, включенных в блок персистентности, информации об объектном / реляционном отображении для этих классов и другой информации конфигурации для блока персистентности и для менеджера (менеджеров) сущностей и фабрики менеджера сущностей для блока персистентности.Файл persistence.xml находится в каталоге META-INF корня единицы сохраняемости.Эта информация может быть определена в виде содержимого или ссылки, как описано ниже.

Вот пример persistence.xml для среды Java SE (с использованием Hibernate в качестве поставщика JPA):

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
  version="1.0">
    <persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.mycompany.Foo</class>
        <class>com.mycompany.Bar</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider" />
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:unit-testing-jpa"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

Некоторые комментарии по поводу вышеуказанного файла:

  • при работе в среде Java SE нельзя полагаться на JTA, а тип транзакции должен быть RESOURCE_LOCAL (что на самом деле является значением по умолчанию в JavaСреда SE, но ее указание делает ее более понятной).
  • при работе в среде Java SE вы не можете использовать источник данных JDNI, и поставщик получит соединения непосредственно из драйвера JDBC, поэтому вы должны передать соответствующую информациюпровайдеру (имя класса драйвера, URL-адрес подключения, пользователь, пароль).В JPA 1.0 свойства, используемые для передачи этих метаданных, зависят от поставщика.
  • Чтобы обеспечить переносимость приложения Java SE, необходимо явно перечислить управляемые классы персистентности, которые включены вединица постоянства.
5 голосов
/ 10 июля 2010

Для работы JPA необходимо META-INF/persistence.xml. Я предполагаю, что это веб-приложение, поэтому эта папка должна быть в WEB-INF/classes/.

Файл persistence.xml будет выглядеть так:

<persistence 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_1_0.xsd"
        version="1.0">

  <persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">

  </persistence-unit>

</persistence>
0 голосов
/ 05 марта 2013
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("<JDBC connection>");

Проверьте правильность соединения JDBC.

...