javax.persistence.PersistenceException: нет поставщика сохраняемости для EntityManager с именем customerManager - PullRequest
20 голосов
/ 18 сентября 2010

Я новичок в JPA и Hibernate.Прочитав некоторые онлайн-материалы, я теперь понимаю, что такое Hibernate и как его можно использовать с JPA.

Теперь я пытаюсь запустить это JPA & Hibernate учебник .Я сделал все, что они упоминают в этом уроке.

У меня нет Oracle DB, только MySQL.Поэтому я внес некоторые изменения в persistence.xml, используя мое понимание JPA и Hibernate (я не знаю, правильно это или нет ... Мне кажется, это так.)

Вот мой 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="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>

Но я, кажется, не понимаю вывод, который они описывают.Это дает мне:

Customer id before creation:null
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.persistence.PersistenceException: No Persistence     provider for EntityManager named customerManager
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
 at CustomerDAO.create(CustomerDAO.java:8)
 at CustomerDAO.main(CustomerDAO.java:22)

Любые предложения будут оценены.

Обновление:

Я внес изменениякоторые просят сделать.Но, все еще получая строки ошибок asme !!!

Они ничего не упоминали о orm.xml в этом уроке.может быть, это проблема, вызывающая проблемы !!!

Ответы [ 10 ]

25 голосов
/ 27 июня 2012

Просто для полноты. Существует другая ситуация, вызывающая эту ошибку:

отсутствует META-INF / services / javax.persistence.spi.PersistenceProvider файл.

Для Hibernate он расположен в hibernate-entitymanager-XXX.jar, поэтому, если hibernate-entitymanager-XXX.jar не находится в вашем пути к классам, вы также получите эту ошибку.

Это сообщение об ошибке вводит в заблуждение, и мне нужно несколько часов, чтобы его исправить.

См. JPA 2.0, использующий Hibernate в качестве провайдера - Исключение: Нет поставщика сохраняемости для EntityManager .

19 голосов
/ 18 сентября 2010

Ваш persistence.xml недействителен и EntityManagerFactory не может быть создан. Должно быть:

<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="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>

(обратите внимание, что элементы <property> закрыты, они не должны быть вложенными)

Обновление: Я прошел учебник, и вам также придется изменить стратегию генерации Id при использовании MySQL (поскольку MySQL не поддерживает последовательности). Я предлагаю использовать стратегию AUTO (по умолчанию IDENTITY с MySQL). Для этого удалите аннотацию SequenceGenerator и измените код следующим образом:

@Entity
@Table(name="TAB_CUSTOMER")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="CUSTOMER_ID", precision=0)
    private Long customerId = null;

   ...
}

Это должно помочь.

PS: вы также должны предоставить log4j.properties, как предложено.

16 голосов
/ 11 февраля 2014

У меня была такая же проблема сегодня.Мой файл persistence.xml был не в том месте.Я должен был поставить его по следующему пути:

project/src/main/resources/META-INF/persistence.xml
9 голосов
/ 04 июня 2012

Я столкнулся с той же проблемой.Я понял, что использую класс провайдера Wrong в файле persistence.xml

Для Hibernate это должно быть

<provider>org.hibernate.ejb.HibernatePersistence</provider>

А для EclipseLink это должно быть

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
2 голосов
/ 24 мая 2017

Если вы используете Hibernate 5.2.10.Final, вы должны изменить

<provider>org.hibernate.ejb.HibernatePersistence</provider>

на

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

в вашем файле persistence.xml

Согласно Hibernate 5.2.2: Отсутствует поставщик сохраняемости для EntityManager

1 голос
/ 20 апреля 2018

Если вы используете Maven, вы можете иметь оба src/{main,test}/resources/META-INF/persistence.xml.Это обычная настройка: протестируйте свой код JPA с h2 или Derby и разверните его с PostgreSQL или какой-либо другой полноценной СУБД.Если вы используете этот шаблон, убедитесь, что два файла имеют разные имена модулей, в противном случае некоторые версии класса Persistence будут пытаться загрузить ОБА (поскольку, конечно, ваш CLASSPATH во время тестирования включает в себя обаклассы и тест-классы);это приведет к противоречивым определениям модуля персистентности, что приведет к страшному раздражающему сообщению, которое мы все так ненавидим!

Хуже: это может «работать» с некоторыми более старыми версиями, например, Hibernate, но не с текущими,В любом случае, стоит сделать все правильно ...

0 голосов
/ 05 января 2016

Я также столкнулся с той же проблемой, когда пытался настроить диспетчер сущностей JPA, настроенный в Tomcat 8. Сначала у меня возникла проблема с тем, что класс SystemException не был найден, и, следовательно, entityManagerFactory не создавался.Я удалил зависимость диспетчера сущностей hibernate, а затем мой entityManagerFactory не смог найти поставщика постоянства.После долгих исследований и времени выяснилось, что менеджер сущностей в спящем состоянии должен искать какую-то конфигурацию.Затем верните jar менеджера сущностей, а затем добавьте JTA Api в качестве зависимости, и все заработало.

0 голосов
/ 06 октября 2015

Я видел эту ошибку, для меня проблема была в пробеле в абсолютном пути файла persistance.xml, удаление того же помогло мне.

0 голосов
/ 07 декабря 2013

мой опыт подсказывает мне, что при отсутствии файла persistence.xml будет сгенерировано то же исключение.

Я поймал ту же ошибку сегодня, когда попытался запустить пакет jar, упакованный ant.

когда я использовал jar tvf для проверки содержимого файла jar, я понял, что "ant" забыл запаковать persistnece.xml для меня.

после того, как я вручную перепаковал файл jar, ошибка msg исчезла.

так что я полагаю, что, возможно, вам следует просто поместить META-INF в каталог src и поместить туда свой файл persistence.xml.

0 голосов
/ 18 мая 2012

Слишком поздно, но я получил ту же проблему и исправил ее, переключив schemalocation на schemaLocation в файле persistence.xml (строка 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...