Вопрос по persistence, toplink, classpath, java, jpa – JPA с TopLink: METP-INF / persistence.xml не найден в classpath

8
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.

@oxbow_lakes - Вы могли бы это исправить :-) Я только что сделал. ChssPly76
Да у меня такая же структура Switch

Ваш Ответ

7   ответов
0

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

правильное имя единицы персистентности Switch
1

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

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

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

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

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

2

Ошибка несколько вводит в заблуждение. сам файл 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?

Jar-файл, содержащий реализацию «IRCBotPU» в пути к классам?
Мой путь к классу настроен так, как вы упомянули выше. Но он все равно не сработает. Switch
22

У меня была та же проблема, я держал свой файл 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.

в затмении у меня сработало следующее: src / META-INF / persistence.xml
0

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

Поскольку src находится на пути к классам, именно поэтому он работал.
1

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

Спасибо, это был единственный, который действительно работал.

Похожие вопросы