Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA 2.0 using Hibernate as provider - Exception: No Persistence provider for EntityManager

I'm trying to set up a simple jpa 2.0 project by following the information in the Hibernate EntityManager documentation. I've been on this for hours now, but no matter what I do I always get this exception when I try to create a 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) 

I've found quite a few similar questions regarding this exception, but no solutions that I am able to get to work. What am I doing wrong here?

directory structure

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

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

my 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();     } } 
like image 535
Holm Avatar asked Oct 18 '11 13:10

Holm


2 Answers

Maybe you miss the Provider class or one of its dependencies in your pom.xml dependencies?

The link you give to the hibernate docs says that you should also add

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

to your pom.xml

like image 195
Henk de Vries Avatar answered Sep 22 '22 18:09

Henk de Vries


persistence.xml is meant to be present in META-INF directory and META-INF is meant to be present in the classpath of the application which is src folder.

As per your folder structure its present in resource folder, try moving it to classpath it sholud work.

like image 26
Ketan Avatar answered Sep 19 '22 18:09

Ketan