2011-10-18 39 views
26

我想通过遵循Hibernate EntityManager documentation中的信息来设置一个简单的jpa 2.0项目。我一直在这几个小时了,但不管我做什么,当我尝试创建一个EntityManagerFactory的我总是得到这样的例外:使用Hibernate作为提供者的JPA 2.0 - 例外:没有EntityManager的持久性提供者

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

<persistence 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_2_0.xsd" 
      version="2.0"> 
    <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>se.mycomp.domain.User</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/test"/> 
      <property name="javax.persistence.jdbc.user" value="test"/> 
      <property name="javax.persistence.jdbc.password" value="1234"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>se.lil.tryjpa</groupId> 
<artifactId>try-jpa</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

    <hibernate-core.version>3.6.4.Final</hibernate-core.version> 
    <mysql-connector-java.version>5.1.16</mysql-connector-java.version> 
    <slf4j.version>1.6.1</slf4j.version> 
    <log4j.version>1.6.1</log4j.version> 
</properties> 

<dependencies> 
    <!-- HIBERNATE DEPENDENCIES --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate-core.version}</version> 
    </dependency> 

    <!-- MYSQL DEPENDENCIES --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>${mysql-connector-java.version}</version> 
    </dependency> 

    <!-- Logging Dependencies --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <optimize>true</optimize> 
       <debug>true</debug> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.8</version> 
      <configuration> 
       <downloadSources>true</downloadSources> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

UserTest.java

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

回答

45

也许你错过了Provider类或者在你的pom.xml依赖它的一个依赖?

你给休眠文档的链接说,你还应该添加

<project ...> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate-core-version}</version> 
    </dependency> 
    </dependencies> 
</project> 

到你的pom.xml

+4

根本没有令人尴尬,该错误信息是单独无用的(适用于大量的问题)。 –

+5

我想补充一点,这个依赖关系应该替代'hibernate-core',而不仅仅是一起添加,因为它实际上已经包含了'hibernate-core'。查看Hibernate [下载页面]上的Maven依赖关系列表(http://hibernate.org/orm/downloads/)。他们明确地说'对于JPA,使用hibernate-entitymanager而不是hibernate-core'。 – jFrenetic

+0

我没有使用maven,所以通过添加hibernate-entity-manager.jar(可在hibernate 5.5.2 zip的dist \ lib \ optional \ jpa目录中找到),然后下载并添加jta-1.1来解决此问题。罐 –

1

的persistence.xml是指存在于META-INF目录和间INF应该存在于src文件夹的应用程序的类路径中。

按照您的文件夹结构它存在于资源文件夹中,请尝试将其移动到类路径它正在工作。

0

我使用下面的依赖关系,并以下供应商这个问题很好解决:

<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> 

是最新作版本不为你工作,你可以使用 1.0.1.Final对Hibernate,jpa- 2.0 API 和5.2.5.Final对Hibernate-EntityManager的

此外,在persistence.xml中,不要忘了hbm2dll.auto特性(这是一个问题,我花了一些时间来找出)

<property name="hibernate.hbm2ddl.auto" value="create"/> 
<property name="hibernate.show_sql" value="true"/> 

然后做一个maven干净安装

相关问题