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干净安装
- Hibernate生成的DDL中语法错误“type = MyISAM”无效
- Hibernate + SQLite没有创建数据库
- org.hibernate.loader.MultipleBagFetchException:无法同时获取多个行李
- 线程“main”中的exceptionorg.hibernate.MappingException:未知实体
- “找不到持久性单元”错误
- Struts 2:带点或逗号的双精度值
- 如何使用Hibernate Envers检索带有@ManyToOne关系的审计寄存器
- 找不到当前线程的会话(Spring 3.1.X和Hibernate 4)
- 没有可用于当前线程的实际事务的EntityManager – 无法可靠地处理“刷新”调用