Поставщик сущностей для EntityManager не указан

У меня есть мой persistence.xml с тем же именем, используя toplink, в каталоге META-INF. Затем у меня есть код, вызывающий его:

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); 

Тем не менее, я получил следующее сообщение об ошибке

 2009-07-21 09: 22: 41,018 [главная] ОШИБКА: поставщик постоянной сущности для EntityManager с именем agisdb
 javax.persistence.PersistenceException: поставщик с постоянством для EntityManager с именем agisdb
     в javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89)
     в javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)

Вот persistence.xml:

    com.agis.livedb.domain.AddressEntity com.agis.livedb.domain.TrafficCameraEntity com.agis.livedb.domain.TrafficPhotoEntity com.agis.livedb.domain.TrafficReportEntity         

Это должно было быть в пути к classам. Тем не менее, я получил вышеупомянутую ошибку.

24 Solutions collect form web for “Поставщик сущностей для EntityManager не указан”

После определите имя поставщика сохранения:

 org.hibernate.ejb.HibernatePersistence 

Поместите "hibernate-entitymanager.jar" в путь classа приложения.
Для более новых версий вы должны использовать "hibernate-core.jar" вместо устаревшего hibernate-entitymanager

Если вы используете некоторую среду IDE, например Eclipse : Project Properties -> Java Build Path -> Libraries.

В противном случае поместите его в /lib вашего приложения.

Убедитесь, что файл persistence.xml находится в каталоге: /WEB-INF/classes/META-INF

Мне это нужно в моем файле pom.xml:

  org.hibernate hibernate-entitymanager 4.2.6.Final  

Возможно, вы определили одного поставщика, например org.hibernate.ejb.HibernatePersistence но ссылаетесь на другой в банке. Это произошло со мной: мой поставщик persistence.xml был openjpa, но я использовал eclipselink в своем пути к classам. Надеюсь, эта помощь!

Есть еще один момент: если вы столкнулись с этой проблемой в среде RCP Eclipse, возможно, вам придется изменить генерацию Factory из Persistence.createEntityManagerFactory на new PersistenceProvider().createEntityManagerFactory

см. ECF для подробного обсуждения этого вопроса.

Столкнулся с той же проблемой и долгое время не мог найти решение. В моем случае это помогло заменить

 org.hibernate.ejb.HibernatePersistence 

с

 org.hibernate.jpa.HibernatePersistenceProvider 

Принял решение отсюда

Быстрый совет:

  • проверьте, находится ли persistence.xml в вашем пути к classам
  • проверьте, находится ли поставщик hibernate в вашем пути к classам

Используя JPA в автономном приложении (за пределами JavaEE), поставщик постоянного хранения должен быть указан где-то. Это можно сделать двумя способами, о которых я знаю:

  • либо добавить элемент поставщика в блок персистентности: org.hibernate.ejb.HibernatePersistence (как описано в правильном ответе Крисом: https://stackoverflow.com/a/1285436/784594 )
  • или поставщик для интерфейса javax.persistence.spi.PersistenceProvider должен быть указан как служба, см. здесь: http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (обычно это включается, когда вы включаете hibernate или другую реализацию JPA в свой путь к classам

В моем случае я узнал, что из-за неправильной конфигурации maven, hibernate-entitymanager jar не включалась в зависимость, даже если это была временная зависимость другого модуля.

Если вы используете Eclipse, убедитесь, что шаблон исключения не удаляет ваш persistence.xml из исходных папок на пути сборки.

  1. Перейдите в меню «Свойства» -> «Путь сборки Java» -> вкладка « Источник »
  2. Проверьте шаблон исключения, который находится по адресу
    MyProject/src/main/java -> Excluded:
    узел дерева
  3. При желании установите для него значение Excluded: (None) , выбрав узел и нажав кнопку « Изменить» слева.

Корневой регистр: если вы используете m2Eclipse, он автоматически помещается в ваши папки ресурсов. Затем, когда вы пытаетесь запустить тесты внутри eclipse, последующее отсутствие persistence.xml приведет к этой ошибке.

Убедитесь, что вы создали файл persistence.xml в папке ‘src’. Я создал в папке проекта, и это была моя проблема.

Это происходит, когда менеджер объектов пытается указать на многие единицы сохранения. Выполните следующие действия:

  1. откройте связанный файл в своем редакторе (если ваш проект был закрыт в вашей среде IDE)
  2. удалить все связанные с персистентностью и сущностью
  3. сохранить файл
  4. откройте проект в своей среде IDE
  5. теперь привяжите db или таблицу по вашему выбору

Я столкнулся с той же проблемой, но с EclipseLink версии 2.5.0 .

Я решил проблему, добавив еще один файл jar, который был обязательно ( javax.persistence_2.1.0.v201304241213.jar.jar );

Банкам необходимо:
– javax.persistence_2.1.0.v201304241213.jar
– eclipselink.jar
– jdbc.jar (в зависимости от используемой базы данных).

Надеюсь, это поможет.

У меня также была эта ошибка, но проблема заключалась в uri пространства имен в файле persistence.xml .

Я заменил http://xmlns.jcp.org/xml/ns/persistence на http://java.sun.com/xml/ns/persistence и версию с 2.1 по 2.0.

Сейчас он работает.

Вам нужно добавить hibernate-entitymanager-x.jar в путь к classам.

В Hibernate 4.x, если jar присутствует, то нет необходимости добавлять org.hibernate.ejb.HibernatePersistence в файл persistence.xml.

На этот вопрос уже был дан ответ, но он просто хотел опубликовать отзыв, который меня поддерживал. Это исключение выбрасывалось после предыдущих ошибок. Я получал это:

 property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead. 

Несмотря на то, что я изменил persistence.xml, чтобы включить новое имя свойства:

  

После сообщения об имени устаревшего свойства я получил такое же PersistenceException, как и выше, и целую строку исключений. Мой совет: обязательно проверьте начало flaskсы.

Кажется, что ошибка в Glassfish v2.1.1, где перераспределяет или разворачивает и развертывает, не обновляет файл persistence.xml, который где-то кэшируется. Мне пришлось перезапустить сервер, а потом он сработал.

В OSGi-контексте необходимо перечислить единицы персистентности в MANIFEST.MF пакета, например

 JPA-PersistenceUnits: my-persistence-unit 

В противном случае пакет JPA не будет знать, что ваш пакет содержит единицы сохранения.

См. http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .

Вам нужны следующие файлы jar в пути к classам:

  1. ANTLR-2.7.6.jar
  2. Викисклад коллекция-3.1.jar
  3. dom4j-1.6.1.jar
  4. спящая-Викисклад annotations-4.0.1.Final.jar
  5. Зимуют-kernel-4.0.1.Final.jar
  6. Зимуют-entitymanager.jar
  7. hibernate JPA-2,0-апи-1.0.0.Final.jar-
  8. Javassist-3.9.0.jar
  9. JBoss-каротаж 3.1.1.GA.jar
  10. JTA-1.1.jar
  11. SLF4J-апи-1.5.8.jar
  12. ххх-driver.jar-JDBC

Я просто скопировал META-INF в src и работал!

Спящий режим 5.2.5
Файлы Jar, необходимые в пути к classу. Это находится в требуемой папке Hibernate 5.2.5 Final release. Его можно загрузить с сайта http://hibernate.org/orm/downloads/

  1. ANTLR-2.7.7
  2. КДИ-апи-1,1
  3. одноclassник-1.3.0
  4. dom4j-1.6.1
  5. эль-апи-2,2
  6. Джеронимо-jta_1.1_spec-1.1.1
  7. hibernate-commons-annotation-5.0.1.Final
  8. hibernate-core-5.2.5.Final
  9. hibernate-jpa-2.1-api-1.0.0.Final
  10. jandex-2.0.3.Final
  11. Javassist-3.20.0-GA
  12. javax.inject-1
  13. JBoss-перехватчик-api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.Final
  15. jsr250-апи-1,0

Создайте XML-файл «persistence.xml» в

YourProject / SRC / META-INF / persistence.xml

persistence.xml

 < ?xml version="1.0" encoding="UTF-8"?>   org.pramod.data.object.UserDetail true              

  1. обратите внимание на информацию, указанную в теге , и версия должна быть 2.1.
  2. обратите внимание на тег , имя упоминается как «образец» . Это имя должно использоваться точно так же, когда вы загружаете

EntityManagerFactor = Persistance.createEntityManagerFactory (“sample”); , «sample» может быть изменен в соответствии с вашим соглашением об именах.

Теперь создайте class Entity. с именем в соответствии с моим примером UserDetail, в пакете org.pramod.data.object

UserDetail.java

 package org.pramod.data.object; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "user_detail") public class UserDetail { @Id @Column(name="user_id") private int id; @Column(name="user_name") private String userName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserDetail [id=" + id + ", userName=" + userName + "]"; } } 

Теперь создайте class с основным методом.

HibernateTest.java

 package org.pramod.hibernate; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.pramod.data.object.UserDetail; public class HibernateTest { private static EntityManagerFactory entityManagerFactory; public static void main(String[] args) { UserDetail user = new UserDetail(); user.setId(1); user.setUserName("Pramod Sharma"); try { entityManagerFactory = Persistence.createEntityManagerFactory("sample"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); entityManager.persist( user ); entityManager.getTransaction().commit(); System.out.println("successfull"); entityManager.close(); } catch (Exception e) { e.printStackTrace(); } } } 

Выход будет

 UserDetail [id=1, userName=Pramod Sharma] Hibernate: drop table if exists user_details Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id)) Hibernate: insert into user_details (user_name, user_id) values (?, ?) successfull 

Если вы используете Maven, возможно, он не ищет подходящее место для папки META-INF. Другие упоминали о копировании папки, но другой способ, который работал для меня, состоял в том, чтобы сказать Maven, где искать его, используя . См .: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html.

Я немного опаздываю на вечеринку, но я попал в то же исключение, пытаясь заставить Hibernate 3.5.1 работать с HSQLDB и настольной программой JavaFX. Я получил его для работы с помощью этой темы и много проб и ошибок. Кажется, вы получаете эту ошибку для целого ряда проблем:

 No Persistence provider for EntityManager named mick 

Я попытался создать примеры учебников для спящего режима, но поскольку я использовал Java 10, я не смог заставить их легко создавать и запускать. Я отказался от этого, не желая тратить время на устранение своих проблем. Настройка файла module-info.java (Jigsaw) – еще один шарик, которого многие еще не обнаружили.

Несколько смущает то, что эти (ниже) были единственными двумя файлами, которые мне нужны в файле build.gradle. В документации Hibernate не ясно, какие именно банки вам нужно включить. Entity-manager вызывал путаницу и больше не требуется в последней версии Hibernate, и ни один из них не является javax.persistence-api. Заметьте, я использую Java 10 здесь, поэтому мне пришлось включить jaxb-api, чтобы обойти некоторые ошибки xml-bind, а также добавить запись для модуля сохранения Java в файл module-info.java.

build.gradle

 // https://mvnrepository.com/artifact/org.hibernate/hibernate-core compile('org.hibernate:hibernate-core:5.3.1.Final') // https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0' 

Module-info.java

 // Used for HsqlDB - add the hibernate-core jar to build.gradle too requires java.persistence; 

С hibernate 5.3.1 вам не нужно указывать поставщика, ниже, в файле persistence.xml. Если один из них не указан, поставщик по умолчанию Hibernate выбирается по умолчанию.

 org.hibernate.jpa.HibernatePersistenceProvider 

Файл persistence.xml должен находиться в соответствующем каталоге, поэтому:

 src/main/resources/META-INF/persistence.xml 

Переход через исходный код спящего режима в отладчике Intellij, где он проверяет диалект, также бросает то же самое исключение из-за недостающего свойства диалекта в файле persistence.xml. Я добавил это (добавьте правильный для вашего типа БД):

  

После этого у меня все еще есть одно и то же исключение, поэтому повторное повторение отладчика в Intellij показало, что тестовый объект, который я пытался сохранить (простой пример родителя-ребенка), отсутствовал в аннотациях для отношений OneToMany, ManyToOne. Я исправил это, и исключение исчезло, и мои сущности были сохранены в порядке.

Вот мой полный окончательный persistence.xml:

    Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide   com.micks.scenebuilderdemo.database.Parent com.micks.scenebuilderdemo.database.Child            

Я, вероятно, потратил около полудня на этот gem. Мой совет – начать очень просто – один тестовый объект с одним или двумя полями, поскольку, похоже, это исключение может иметь много причин.

Если в Persistence.createEntityManagerFactory("JPAService") есть разные имена в разных classах, чем вы получаете ошибку. При рефакторинге можно получить разные имена, которые были в моем случае. В одном classе автогенерация Persistence.createEntityManagerFactory("JPAService") в private void initComponents() , class ContactsTable отличается от Persistence.createEntityManagerFactory("JPAServiceExtended") в classе DBManager.

Мою разрешили, добавив информацию в файл persistence.xml, например org.eclipse.persistence.jpa.PersistenceProvider а затем убедитесь, что у вас есть библиотека на пути к classам, например, в Maven добавьте зависимость, например

  org.eclipse.persistence eclipselink 2.5.0  
Давайте будем гением компьютера.