EclipseLink: не указан поставщик сохраняемости для EntityManager - PullRequest
6 голосов
/ 12 июля 2010

Я бы хотел создать один Bundle, способный использовать Java Persistence. Чтобы добиться этого, я создал проект плагина в Eclipse. В моем проекте я создал файл persistence.xml в META-INF. Я также добавил в свой MANIFEST.mf (в зависимости) эти 3 пакета:

  1. javax.persistence.jar
  2. org.eclipse.persistence.jar
  3. org.eclipse.persistence.jar

Затем в своем активаторе я использую следующие строки для создания EntityManager:

factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
EntityManager em = factory.createEntityManager();

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

javax.persistence.PersistenceException: Нет поставщика сохраняемости для EntityManager с именами людей

Я безуспешно пытался переместить местоположение моего persistence.xml. Кажется, что любой пакет загружает файл persistence.xml. Может быть, я не импортирую нужные пакеты?

Вы можете скачать мой простой Bundle здесь: download

Не могли бы вы помочь мне найти решение или подсказку?

Ответы [ 5 ]

6 голосов
/ 14 июля 2010

Я решил свою проблему. Мне нужно было только указать путь к классу в манифесте: - persistence.jar - eclipselink.jar - mysql-connector.jar

Спасибо

4 голосов
/ 12 июля 2010

Попробуйте добавить этот тег в persistence.xml:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
2 голосов
/ 01 июня 2014

Я получал ту же ошибку в простом проекте, запущенном в Eclipse.

Оказалось, что добавление каталога META-INF (содержащего persistence.xml) в мой путь к классу было неправильным решением.

У вас должен быть каталог, содержащий dir (или jar).Из источников EclipseLink 2.5.1:

   /**
     * Search the classpath for persistence archives. A persistence archive is
     * defined as any part of the class path that contains a META-INF directory
     * with a persistence.xml file in it. Return a list of {@link Archive}
     * representing the root of those files. It is the caller's responsibility
     * to close all the archives.
     * 
     * @param loader the class loader to get the class path from
     */
    public static Set<Archive> findPersistenceArchives(ClassLoader loader){
        // allow alternate persistence location to be specified via system property.  This will allow persistence units
        // with alternate persistence xml locations to be weaved
        String descriptorLocation = System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
        return findPersistenceArchives(loader, descriptorLocation);
    }
2 голосов
/ 13 июля 2010

Похоже, что вы не описали свой блок персистентности в MANIFEST.MF с заголовком JPA-PersistenceUnits :. Вы можете найти более подробную информацию о EclipseLink здесь (1).

(1): http://wiki.eclipse.org/Gemini/JPA/Documentation/CreatingAnApplication

1 голос
/ 14 сентября 2012

Если вы запускаете свое приложение из затмения с помощью Maven, щелкните правой кнопкой мыши проект JPA, выберите «Свойства» и посмотрите, есть ли пункт меню «Сборка развертывания». В этом случае нажмите «Развертывание сборки», нажмите кнопку «Добавить ...», нажмите «Записи пути сборки Java» и выберите «Зависимости Maven». Убедитесь, что eclipselink.jar находится среди зависимостей Maven

...