JPA 2.0使用Hibernate作为提供程序 – 例外:没有EntityManager的持久性提供程序

我正在尝试通过遵循Hibernate EntityManager 文档中的信息来设置一个简单的jpa 2.0项目。 我已经在这几个小时了,但无论我做什么,当我尝试创建一个EntityManagerFactory时,我总是得到这个exception:

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) 

我发现了很多关于这个例外的类似问题,但没有我能够解决的解决方案。 我在这做错了什么?

目录结构

 . ├── pom.xml └── src ├── main │  ├── java │  │  └── se │  │  └── mycomp │  │  ├── UserTest.java │  │  └── domain │  │  └── User.java │  └── resources │  ├── META-INF │  │  └── persistence.xml │  └── log4j.properties └── test └── java 

我的persistence.xml

   org.hibernate.ejb.HibernatePersistence se.mycomp.domain.User           

我的pom.xml

  4.0.0 se.lil.tryjpa try-jpa 1.0-SNAPSHOT jar  UTF-8 3.6.4.Final 5.1.16 1.6.1 1.6.1     org.hibernate hibernate-core ${hibernate-core.version}    mysql mysql-connector-java ${mysql-connector-java.version}    org.slf4j slf4j-api ${slf4j.version}   org.slf4j slf4j-log4j12 ${log4j.version}      org.apache.maven.plugins maven-compiler-plugin 2.3.2  1.6 1.6 true true    org.apache.maven.plugins maven-eclipse-plugin 2.8  true     

UserTest.java

 public class UserTest { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1"); EntityManager em = emf.createEntityManager(); } } 

也许您错过了您的pom.xml依赖项中的Provider类或其依赖项之一?

你给hibernate文档的链接说你也应该添加

  ...   org.hibernate hibernate-entitymanager ${hibernate-core-version}    

到你的pom.xml

persistence.xml意味着存在于META-INF目录中,而META-INF意味着存在于应用程序的类路径中,即src文件夹。

根据你的文件夹结构,它存在于资源文件夹中,尝试将其移动到classpath它sholud work。

我使用下面的依赖项和以下提供程序解决了这个问题:

 org.hibernate.jpa.HibernatePersistenceProvider  org.postgresql postgresql 9.4-1200-jdbc41   org.hibernate.javax.persistence hibernate-jpa-2.0-api LATEST   org.hibernate hibernate-entitymanager LATEST  

是LATEST不适用于你的版本,你可以使用1.0.1.Final用于hibernate-jpa-2.0-api和5.2.5.Final用于hibernate-entitymanager

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

   

然后做一个maven干净安装