web-dev-qa-db-fra.com

JPA 2.0 utilisant Hibernate en tant que fournisseur - Exception: aucun fournisseur de persistance pour EntityManager

J'essaie de mettre en place un simple projet jpa 2.0 en suivant les informations contenues dans Hibernate EntityManager documentation . Cela fait des heures que je suis sur ce sujet, mais quoi que je fasse, je reçois toujours cette exception lorsque je tente de créer un 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)

J'ai trouvé pas mal de questions similaires concernant cette exception, mais aucune solution à mon problème. Qu'est-ce que je fais mal ici?

structure de répertoires

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

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

mon 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();
    }
}
26
Holm

Peut-être manquez-vous la classe Fournisseur ou l’une de ses dépendances dans vos dépendances pom.xml?

Le lien que vous donnez aux documents de veille prolongée indique que vous devez également ajouter

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

à votre pom.xml

45
Henk de Vries

persistence.xml est censé être présent dans le répertoire META-INF et META-INF est censé être présent dans le chemin d'accès aux classes de l'application qui est le dossier src.

Selon la structure de votre dossier qui est présent dans le dossier de ressources, essayez de le déplacer vers classpath pour qu’il fonctionne.

1
Ketan Vishwakarma

J'ai résolu ce problème en utilisant les dépendances ci-dessous et le fournisseur suivant:

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

si LATEST ne fonctionne pas comme version pour vous, vous pouvez utiliser 1.0.1.Final pour hibernate-jpa-2.0-api et 5.2.5.Final pour hibernate-entitymanager.

En outre, dans persistence.xml, n'oubliez pas les propriétés de hbm2dll.auto (c'est un problème que j'ai passé du temps à comprendre)

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

Puis faites une installation propre

0
moldovean