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。
答案 0 :(得分:22)
我有同样的问题,我将我的persistence.xml文件保存在WebContent / META-INF目录中,而jpa规范说:
持久性单元的根目录是WEB-INF / classes目录;因此,persistence.xml文件包含在WEB-INF / classes / META-INF目录中
尝试将persistence.xml放在src / META-INF下。
答案 1 :(得分:3)
如果您使用IntelliJ
或maven项目结构,则需要将整个"META-INF/persistence.xml"
文件放在资源(src / resources)文件夹中,以便它移动persistence.xml
将文件存入"WEB-INF/classes/persistence.xml"
位置。
如果您使用eclipse
或其他内容进行相应更改,则会将文件移至WEB-INF/classes/persistence.xml
其他任何事都不适合我。
答案 2 :(得分:2)
该错误有点误导。 XML文件本身应该不在类路径中;消息中标有“META-INF / persistence.xml”的部分表示包含META-INF / persistence.xml 的目录应。
如果你的硬盘有以下
C:\库\ JPA \ META-INF \ persistence.xml中
那么你的类路径应该包含这个
CLASSPATH=c:\libs\JPA
如果META-INF \ Persistence.xml包含在foo.jar中,假设META-INF / Persistence.xml位于jar的根文件夹中,那么你的类路径应该有这个
CLASSPATH=C:\<path to jar>\foo.jar
这似乎是显而易见或多余的,但我的目标是确保我们将苹果与苹果进行比较,CLASSPATH以及类加载可能是一个可以解决的问题。
那么,你可以发布你的CLASSPATH吗?
答案 3 :(得分:1)
persistence.xml
不应该在你的类路径中;在其META-INF文件夹中包含persistence.xml
的JAR文件应该是。
答案 4 :(得分:1)
我有一个Web应用程序,以下工作正常。我所做的是将带有persistence.xml的META-INF目录添加到src / main / resources位置[Maven项目]
答案 5 :(得分: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-unit的name属性与传递给Persistence.createEntityManagerFactory方法的值不匹配。确保持久性单元名称设置为“IRCBotPU”。
答案 6 :(得分:0)
我在src下创建了一个名为META-INF的文件夹,它可以工作。 “marcosbeirigo”已经回答了。我不知道为什么我必须把那个persistance.xml放在那里。我把它放在WebContent / META-INF下并且不起作用