jos*_*737 13 java jpa entitymanager persistence.xml java-ee
我正在使用JPA开发JavaSE应用程序.不幸的是,我null
打电话后:
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
您将在下面找到:
EntityManagerFactory
并意外返回null
persistence.xml
档案我的代码片段:
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
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
我的项目结构:
cmd*_*cmd 16
您必须将persistence.xml
文件移动到适当的位置.
更具体地说,将META-INF/persistence.xml
文件添加到源文件夹的根目录.
在这种情况下,以下是适当的位置: src\main\java\META-INF\persistence.xml
以下是详细信息:( 摘自JPA规范)
persistence.xml文件定义了持久性单元.persistence.xml文件位于持久性单元根目录的META-INF目录中.
持久性单元的根是这里的关键.
如果您是非Java EE应用程序
META-INF目录包含persistence.xml文件的jar文件或目录称为持久性单元的根.
如果您使用的是Java EE应用程序,则以下内容均有效
在Java EE环境中,持久性单元的根必须是以下之一:
- EJB-JAR文件
- WAR文件的WEB-INF/classes目录[80]
- WAR文件的WEB-INF/lib目录中的jar文件
- EAR库目录中的jar文件
- 应用程序客户端jar文件
Ond*_*Mih 11
快速建议:
在独立应用程序(JavaEE之外)中使用JPA时,需要在某处指定持久性提供程序.这可以通过我所知道的两种方式完成:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
如Chris在这里的正确答案所述:https://stackoverflow.com/a/1285436/784594)在我的例子中,我发现由于maven配置错误,hibernate-entitymanager.jar不包含在依赖项中,即使它是其他模块的瞬态依赖项.
另请参见此处的答案:没有名为EntityManager的持久性提供程序
归档时间: |
|
查看次数: |
69714 次 |
最近记录: |