[英]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.