Java JPA2.0使用Hibernate作为提供程序-例外:EntityManager没有持久性提供程序

Java JPA2.0使用Hibernate作为提供程序-例外:EntityManager没有持久性提供程序,java,hibernate,jpa,maven,Java,Hibernate,Jpa,Maven,我正试图通过遵循Hibernate EntityManager中的信息来建立一个简单的JPA2.0项目。我已经做了几个小时了,但无论我做什么,当我尝试创建EntityManagerFactory时,总是会遇到这样的异常: Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named manager1 at javax.pe

我正试图通过遵循Hibernate EntityManager中的信息来建立一个简单的JPA2.0项目。我已经做了几个小时了,但无论我做什么,当我尝试创建EntityManagerFactory时,总是会遇到这样的异常:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named manager1
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at se.mycomp.UserTest.main(UserTest.java:9)
关于这个例外,我发现了很多类似的问题,但没有解决方案。我做错了什么

目录结构

mypersistence.xml


org.hibernate.ejb.HibernatePersistence
se.mycop.domain.User
mypom.xml


4.0.0
se.lil.tryjpa
试试jpa
1.0-快照
罐子
UTF-8
3.6.4.4最终版本
5.1.16
1.6.1
1.6.1
org.hibernate
冬眠核心
${hibernate core.version}
mysql
mysql连接器java
${mysql connector java.version}
org.slf4j
slf4j api
${slf4j.version}
org.slf4j
slf4j-log4j12
${log4j.version}
org.apache.maven.plugins
maven编译器插件
2.3.2
1.6
1.6
真的
真的
org.apache.maven.plugins
maven eclipse插件
2.8
真的

UserTest.java


在pom.xml依赖项中,您可能错过了提供程序类或它的一个依赖项

您给hibernate文档的链接说您还应该添加


...
org.hibernate
休眠实体管理器
${hibernate核心版本}

对于pom.xml,persistence.xml将出现在META-INF目录中,META-INF将出现在应用程序的类路径中,即src文件夹中


根据您在资源文件夹中的文件夹结构,尝试将其移动到类路径,以便正常工作。

我使用以下依赖项和以下提供程序解决了此问题:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>


 <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1200-jdbc41</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>LATEST</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>LATEST</version>
</dependency>
org.hibernate.jpa.HibernatePersistenceProvider
org.postgresql
postgresql
9.4-1200-jdbc41
org.hibernate.javax.persistence
hibernate-jpa-2.0-api
最新的
org.hibernate
休眠实体管理器
最新的
最新版本不适用于您,您可以使用 hibernate-jpa-2.0-api的1.0.1.Final hibernate entitymanager的最终版本为5.2.5

另外,在persistence.xml中,不要忘记hbm2dll.auto属性(这是我花了一些时间弄清楚的一个问题)



然后进行一次maven clean安装

一点也不尴尬,这个错误消息是完全无用的(适用于所有问题)。我想补充一点,这个依赖项应该取代
hibernate核心
一个,而不仅仅是添加在一起,因为它实际上已经包括
hibernate核心
。请参阅Hibernate上的Maven依赖项列表。他们明确地说,对于JPA,使用hibernate entitymanager而不是hibernate core。我没有使用maven,所以通过添加hibernate-entity-manager.jar(位于hibernate 5.5.2 zip中的dist\lib\optional\JPA目录中),然后下载并添加jta-1.1.jar,解决了这个问题
public class UserTest {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
        EntityManager em = emf.createEntityManager();
    }
}
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>


 <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1200-jdbc41</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>LATEST</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>LATEST</version>
</dependency>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>