web-dev-qa-db-fra.com

Hibernate 5.2.2: Aucun fournisseur de persistance pour EntityManager

Qu'est-ce qui a changé entre Hibernate 5.1.1 et 5.2.2? Si j'utilise 5.2.2, un message d'erreur apparaît: "Aucun fournisseur de persistance pour EntityManager nommé pu". La même configuration fonctionne avec 5.1.1. Comment dois-je changer mon code pour que 5.2.2 fonctionne?

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>jpatest</groupId>
    <artifactId>jpatest</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <hibernate.version>5.2.2.Final</hibernate.version>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4.1209.jre7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
    </dependencies>
</project>

persistence.xml dans src/main/ressources/META-INF

<?xml version="1.0" encoding="UTF-8" ?>
<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" xmlns="http://Java.Sun.com/xml/ns/persistence">
    <persistence-unit name="pu" >
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mydb" />
            <property name="hibernate.default_schema" value="myschema" />
            <property name="hibernate.connection.username" value="xxx" />
            <property name="hibernate.connection.password" value="zzz" />
            <!-- <property name="hibernate.show_sql" value="true"/> -->
            <property name="hibernate.flushMode" value="FLUSH_AUTO" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>
</persistence>

créer EntityManager 

factory = Persistence.createEntityManagerFactory("pu");
em = factory.createEntityManager();
tx = em.getTransaction();
18
tok

La classe org.hibernate.ejb.HibernatePersistence n'existe pas dans le fichier d'ensemble hibernate-release-5.2.2.Final.Zip. C'est pourquoi le fournisseur ne peut pas être trouvé, parce que la classe ne peut pas (dans les fichiers jars de la bibliothèque du projet). Au lieu de cela, j'ai utilisé la classe org.hibernate.jpa.HibernatePersistenceProvider , quiPEUTse trouver dans hibernate-core-5.2.2.Final.jar (fourni avec hibernate-release-5.2. 2.Final.Zip bundle), en remplaçant le fournisseur dans persistence.xml par<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>. Cela a bien fonctionné! J'espère que le problème est seulement ceci.

60
Daniel Pinheiro

J'ai eu la même erreur ..__ J'ai changé de version de 

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>

de 5.3.1.Final à 5.3.6.Final et erreur ont disparu.

1
Spasoje

Parfois, le simple fait d’oublier d’ajouter le fichier persistence.xml au chemin de génération provoque ce problème. Suivez les étapes suivantes:

  1. Faites un clic droit sur le fichier persistence.xml
  2. Cliquez sur le chemin de construction
  3. Ajouter au chemin de construction

Alors ça devrait marcher.

0
Bijay Raj Ghimire