没有名为X的EntityManager的持久性提供程序 [英] No Persistence provider for EntityManager named X

查看:119
本文介绍了没有名为X的EntityManager的持久性提供程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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 returns null
  • 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆