Решение: не найден поставщик Persistence для EntityManager

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

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

Внимательно проверьте файл META-INF/persistence.xml: здесь имя <persistence-unit> должно совпадать с тем, которое вы используете в Persistence.createEntityManagerFactory().

Пример:

xml
Скопировать код
<persistence-unit name="YourUnitName">
  <!-- Конфигурация -->
</persistence-unit>

Также проследите, чтобы реализация JPA, например, Hibernate, была включена в classpath. Если все компоненты на месте, EntityManager будет работать исправно.

Кинга Идем в IT: пошаговый план для смены профессии

Проверьте jar-файлы и classpath

Убедитесь в присутствии Hibernate-core.jar в classpath. Обычно в IDE, таких как Eclipse или IntelliJ, этот jar-файл располагается в /lib. Для Maven убедитесь, что в файле pom.xml корректно указана зависимость.

xml
Скопировать код
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.12.Final</version> <!-- Укажите актуальную версию -->
</dependency>

Приведите в порядок конфигурацию persistence

Тщательно проверьте файл persistence.xml. Вам необходимо:

  • Указать провайдера: <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  • Проверить данные подключения (URL, драйвер, имя пользователя, пароль)
  • Проверить имя unit в Persistence.createEntityManagerFactory("YourUnitName")

Откажитесь от устаревших компонентов

Нужно отказаться от использования org.hibernate.ejb.HibernatePersistence в пользу HibernatePersistenceProvider. Соответственно, обновите также зависимости: замените hibernate-entitymanager на hibernate-core. В Maven используйте актуальные версии зависимостей.

xml
Скопировать код
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version> <!-- Замените на актуальную версию -->
</dependency>

Рассмотрите альтернативные решения

Если проблема всё ещё остаётся нерешённой, проверьте:

  • Может ли быть конфликт между другими настройками и конфигурацией persistence?
  • Возможно, вы ошиблись при выборе поставщика persistence?
  • Включены ли все необходимые зависимости для выбранного поставщика?

Визуализация

Схема работы EntityManager:

Поставщик persistence   🚂  ⇒  EntityManagerFactory  ⇒  EntityManager  ⇒  Данные
(например, Hibernate)       (Двигатель)                (Станция)             (Поезд)            (Пассажиры)

Отсутствие поставщика persistence можно сравнить с отсутствием двигателя, без которого поезд не сможет двигаться.

Правильно разместите блок persistence

Местоположение файла persistence.xml имеет значение. В веб-приложениях он должен быть размещён в <webroot>/WEB-INF/classes/META-INF.

Тщательно проверьте конфигурацию базы данных

Следует проверить:

  • Соответствует ли JDBC URL.
  • Соответствует ли класс JDBC драйвера используемой СУБД.
  • Верны ли учётные данные для доступа к базе данных.

Малейшие ошибки могут стать причиной серьёзных проблем.

Укажите все необходимые зависимости

Ваш проект должен точно декларировать все зависимости. Maven и Gradle вам в этом помогут, но проверка файла сборки вручную также будет полезной.

Смело боритесь с конфликтами

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

Полезные материалы

  1. Eclipse error: "The import XXX cannot be resolved" – Stack Overflow — как решить проблемы с импортом в Eclipse.
  2. Part VIII: Persistence (Release 7) – Oracle Docs — официальное руководство по JPA от Oracle.
  3. Java persistence API – Tutorial – Vogella — подробное руководство по JPA для разработчиков на Java.
  4. Java Persistence/Setting the CLASSPATH – Wikibooks — как настроить CLASSPATH для Java Persistence.
Свежие материалы