JPA с TopLink: METP-INF/persistence.xml не найден в classpath

public class LoginTest {

public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("IRCBotPU");
    EntityManager em = emf.createEntityManager();

    em.getTransaction().begin();

    Login lg = new Login();
    lg.setPassword("password");
    lg.setUserName("Rocky");

    em.persist(lg);
    em.flush();

    Login st = em.find(Login.class, lg.getPassword());
    System.out.println(st);

    em.getTransaction().commit();

    em.close();
    emf.close();

}
}

Я получаю исключение, когда пытаюсь запустить этот класс

javax.persistence.PersistenceException: No Persistence provider for EntityManager named IRCBotPU:  
   No META-INF/persistence.xml was found in classpath.

META-INF/persistence.xml находится в моем классе. Я не знаю, в чем причина или это исключение.

Постоянная библиотека - TopLink.

7 ответов

У меня была та же проблема, я держал свой файл persistence.xml в каталоге WebContent/META-INF, в то время как спецификация jpa гласит:
корнем модуля персистентности является каталог WEB-INF/classes; поэтому файл persistence.xml содержится в каталоге WEB-INF/classes/META-INF
попробуйте поместить файл persistence.xml в src/META-INF.

Если вы используете IntelliJ или структура проекта Maven вам нужно разместить весь "META-INF/persistence.xml" файл в папке in resources(src/resources), чтобы он persistence.xml подать в "WEB-INF/classes/persistence.xml" место нахождения.

если вы используете eclipse или что-то еще вносит соответствующие изменения, чтобы файл переместился в WEB-INF/classes/persistence.xml

что-то еще не работает для меня.

Ошибка несколько вводит в заблуждение. сам файл XML не должен находиться в пути к классам; часть сообщения "META-INF/persistence.xml" означает, что каталог, содержащий META-INF / persistence.xml, должен быть.

Если на вашем жестком диске было следующее

C:\ ЛИЭС \JPA\ META-INF \ persistence.xml

тогда ваш classpath должен включать это

CLASSPATH=c:\libs\JPA

Если META-INF\Persistence.xml содержался в файле foo.jar, предполагая, что META-INF/Persistence.xml находится в корневой папке jar, ваш путь к классам должен иметь это

CLASSPATH=C:\<path to jar>\foo.jar

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

Итак, вы можете опубликовать свой CLASSPATH?

persistence.xml не должно быть в вашем классе; JAR-файл, который содержит persistence.xml в своей папке META-INF следует.

У меня есть веб-приложение, и следующее работало нормально. Я добавил каталог META-INF с файлом persistence.xml в папку src/main/resources [проект Maven]

Я создал папку с именем META-INF под src, и она работает. "Marcosbeirigo" уже ответил на это. Я не знаю, почему я должен поместить туда этот файл persistance.xml. Я поместил его в WebContent/META-INF и не работал

Ваш файл META-INF/persistence.xml должен выглядеть примерно так:

// <persistence>
//   <persistence-unit name="IRCBotPU">
//     <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
//     <!-- All persistence classes must be listed -->
//     <class>entity.Customer</class>
//     <class>entity.Order</class>
//     <class>entity.Item</class>
//     <properties>
//       <!-- Provider-specific connection properties -->
//       <property name="toplink.jdbc.driver" value="<database driver>"/>
//       <property name="toplink.jdbc.url" value="<database url>"/>
//       <property name="toplink.jdbc.user" value="<user>"/>
//       <property name="toplink.jdbc.password" value="<password>"/>
//       <!-- Provider-specific settings -->
//       <property name="toplink.logging.level" value="INFO"/>
//     </properties>
//   </persistence-unit>
// </persistence>

Атрибут name вашего модуля постоянства в файле persistence.xml не соответствует значению, которое вы передаете в метод Persistence.createEntityManagerFactory. Убедитесь, что ваше имя персистентного устройства установлено в "IRCBotPU".

Другие вопросы по тегам