没有名为X的EntityManager的持久性提供程序 [英] No Persistence provider for EntityManager named X
问题描述
我正在使用JPA开发JavaSE应用程序。不幸的是,我在调用后得到 null
:
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
I am developing a JavaSE application using JPA. Unfortunately, I get null
after calling:
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
下面你会发现:
- 我的代码片段调用
EntityManagerFactory
并意外返回null
- 我的
persistence.xml
file - 我的项目结构
- A snippet of my code that invokes
EntityManagerFactory
and unexpectedly returnsnull
- My
persistence.xml
file - My project structure
我的代码片段:
public class Main {
private static final String PERSISTENCE_UNIT_NAME = "MeineJpaPU";
private static EntityManagerFactory factory;
public static void main(String[] args) {
// I get null on this line!!!
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
// do stuff with entity manager
...
}
}
我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="MeineJpaPU" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>path.to.package.server.Todo</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
<property name="javax.persistence.jdbc.password" value="postgres"/>
</properties>
</persistence-unit>
</persistence>
我的项目结构:
推荐答案
您必须将 persistence.xml
文件移至适当的位置。
You must move persistence.xml
file to an appropriate location.
更具体地说,将 META-INF / persistence.xml
文件添加到源文件夹的根目录。
More specifically, add META-INF/persistence.xml
file to the root of a source folder.
在这种情况下,以下是适当的位置: src\main\java\META-INF\persistence.xml
In this case, the following is an appropriate location: src\main\java\META-INF\persistence.xml
以下是详细信息:
(取自 JPA规范)
Here are the details: (taken from the JPA spec)
A persistence.xml file defines a persistence unit. The persistence.xml file is
located in the META-INF directory of the root of the persistence unit.
持久性单元的根是这里的关键。
The root of the persistence unit is the key here.
如果您是非Java EE应用程序
The jar file or directory whose META-INF directory contains the persistence.xml
file is termed the root of the persistence unit.
如果您使用的是 Java EE应用,则以下内容有效
If you are in a Java EE app, the following are valid
In Java EE environments, the root of a persistence unit must be one of the following:
• an EJB-JAR file
• the WEB-INF/classes directory of a WAR file[80]
• a jar file in the WEB-INF/lib directory of a WAR file
• a jar file in the EAR library directory
• an application client jar file
这篇关于没有名为X的EntityManager的持久性提供程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!