繁体   English   中英

带有TopLink的JPA:在类路径中未找到META-INF / persistence.xml

[英]JPA with TopLink: No META-INF/persistence.xml was found in 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。

我有同样的问题,我将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"文件放置在resources(src / resources)文件夹中的in文件夹中,以便它将persistence.xml文件移动到"WEB-INF/classes/persistence.xml"位置。

如果您使用的是eclipse或其他方式进行相应的更改,则它将文件移至WEB-INF/classes/persistence.xml

其他什么对我都不起作用。

该错误有些令人误解。 XML文件本身应该在类路径; 消息中显示“ META-INF / persistence.xml”的部分表示包含META-INF / persistence.xml的目录应该是。

如果您的硬盘驱动器上有以下内容

C:\\ libs \\ 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不应位于您的类路径中; 应该在其META-INF文件夹中包含persistence.xml JAR文件。

我有一个Web应用程序,以下工作正常。 我所做的是将带有persistence.xml的META-INF目录添加到src / main / resources位置[Maven项目]

您的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中的持久性单元的name属性与传递给Persistence.createEntityManagerFactory方法的值不匹配。 确保您的持久性单元名称设置为“ IRCBotPU”。

我在src下创建了一个名为META-INF的文件夹,它可以正常工作。 “ marcosbeirigo”已经回答了。 我不知道为什么我必须在其中放入persistance.xml。 我把它放在WebContent / META-INF下,没有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM