java - hibernatepersistenceprovider - Hibernate 5.2.2: no hay proveedor de persistencia para EntityManager
org hibernate jpa hibernatepersistenceprovider maven (3)
A veces, simplemente olvidando agregar el archivo persistence.xml
para crear la ruta causa este problema. Siga los siguientes pasos:
- Haga clic derecho en el archivo
persistence.xml
. - Haga clic en Build Path
- Añadir a construir ruta
Entonces debería funcionar.
¿Qué ha cambiado entre Hibernate 5.1.1 y 5.2.2? Si uso 5.2.2 obtendré un mensaje de error "Ningún proveedor de persistencia para EntityManager llamado pu". Exactamente la misma configuración funciona con 5.1.1. ¿Cómo debo cambiar mi código para que funcione 5.2.2?
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 en src / main / resources / 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>
creando EntityManager
factory = Persistence.createEntityManagerFactory("pu");
em = factory.createEntityManager();
tx = em.getTransaction();
La clase org.hibernate.ejb.HibernatePersistence no existe en el archivo del paquete hibernate-release-5.2.2.Final.zip . Es por eso que no se puede encontrar al proveedor, porque la clase no puede (en los frascos de la biblioteca del proyecto). En su lugar, utilicé la clase org.hibernate.jpa.HibernatePersistenceProvider , que se puede encontrar en hibernate-core-5.2.2.Final.jar (que viene con hibernate-release-5.2.2.Final.zip bundle), cambiando el proveedor en persistence.xml para <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
. ¡Al hacerlo, funcionó bien! Espero que el problema sea solo esto.
Yo tenía el mismo error. Cambié la versión de
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
de 5.3.1.Final a 5.3.6.Final y error desaparecieron.