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();
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.
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.
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:
persistence.xml
. Alors ça devrait marcher.