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.

 Switch14 авг. 2009 г., 19:30
Да у меня такая же структура
 ChssPly7614 авг. 2009 г., 19:53
@oxbow_lakes - Вы могли бы это исправить :-) Я только что сделал.

Ответы на вопрос(7)

У меня была та же проблема, я держал свой файл persistence.xml в каталоге WebContent / META-INF, в то время как спецификация jpa гласит:
the root of the persistence unit is the WEB-INF/classes directory; the persistence.xml file is therefore contained in the WEB-INF/classes/META-INF directory
попробуйте поместить файл persistence.xml в src / META-INF.

 29 окт. 2013 г., 10:22
в затмении у меня сработало следующее: src / META-INF / persistence.xml

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

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

у меня ничего не получалось.

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

 14 авг. 2009 г., 19:40
Как называется JAR-файл, содержащий META-INF / persistence.xml? Сказано ли JAR в ваших приложениях CLASSPATH?
 Switch14 авг. 2009 г., 19:32
да, это в папке META-INF
 Switch14 авг. 2009 г., 19:51
Нет, это не JAR-файл, который я использую NetBeans 6.0, поэтому он просто создает пакет META-INF и внутри него persistence.xml.

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

 06 сент. 2016 г., 16:59
Поскольку src находится на пути к классам, именно поэтому он работал.

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

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

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?

 Switch15 авг. 2009 г., 06:38
Мой путь к классу настроен так, как вы упомянули выше. Но он все равно не сработает.
 15 авг. 2009 г., 19:34
Jar-файл, содержащий реализацию «IRCBotPU» в пути к классам?

Ваш файл 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>

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

 Switch14 авг. 2009 г., 20:02
правильное имя единицы персистентности

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

 27 мар. 2013 г., 13:15
Спасибо, это был единственный, который действительно работал.

Ваш ответ на вопрос