Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Error] No puedo configurar Hibernate con MySQL (error: javax.persistence.PersistenceException)

¡Hola, Comunidad! ¿Podrían apoyarme un poco de favooor? Estoy intentado hacer los ejercicios del curso de Hibernate usando MySQL como DB pero simplemente no logro hacer que funcione el código para conectarme, la consola me arroja este error: "WARNING: javax.persistence.spi::No valid providers found. Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named PCJpa"

He intentado muchas cosas durante algunos días, incluso seguí las recomendaciones de nustro compañero https://app.aluracursos.com/forum/topico-sugerencia-persistence-xml-para-mysql-194864 pero simplemente no funciona y me estoy estancando :(. Estoy usando Eclipse, Java SE, java 11 y estos son mi POM y persistence.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>mycompany</groupId>
  <artifactId>peluqueria-canina-jpa</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>peluqueria-canina-jpa</name>
    <description>Proyecto para practicar con JDBC y DB</description>
  <!-- FIXME change it to the project's website -->

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
      
    <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.3.1.Final</version>
    </dependency>
    
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.32.Final</version>
    </dependency>
    
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>
    
  </dependencies>

  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
              <configuration>
                  <source>11</source>
                  <target>11</target>
              </configuration>
          </plugin>
      </plugins>
  </build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
             
    <persistence-unit name="PCJpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        
        <class>com.mycompany.modelo2.Producto</class>
        <class>com.mycompany.modelo2.Libro</class>
        <class>com.mycompany.modelo2.Categoria</class>
        
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/peluqeria_canina_jpa?serverTimezone=UTC"/>
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="456789" />
            <property name="hibernate.hbm2ddl.auto" value="update" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
          <!-- <property name="javax.persistence.schema-generation.database.action" value="create"/>  -->
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            
        </properties>
    </persistence-unit>
</persistence>
2 respuestas
solución!

¡Hola Oscar!

Entiendo que estás teniendo problemas para configurar Hibernate con MySQL y estás obteniendo un error de javax.persistence.PersistenceException. Parece que el error se debe a que no se encuentra un proveedor de persistencia válido.

Revisando tu archivo persistence.xml, veo que estás utilizando el proveedor org.hibernate.jpa.HibernatePersistenceProvider, que es válido para versiones anteriores de Hibernate. Sin embargo, en tu archivo pom.xml, estás utilizando la versión 6.3.1.Final de Hibernate Core y la versión 5.3.32.Final de Hibernate EntityManager.

Te recomendaría que utilices la misma versión de Hibernate en ambos archivos. En este caso, puedes actualizar tu archivo persistence.xml para utilizar el proveedor org.hibernate.jpa.HibernatePersistenceProvider de la versión 6.3.1.Final. También puedes eliminar la dependencia de Hibernate EntityManager del archivo pom.xml, ya que Hibernate Core incluye todas las funcionalidades necesarias.

Aquí está el archivo persistence.xml actualizado:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
             
    <persistence-unit name="PCJpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        
        <class>com.mycompany.modelo2.Producto</class>
        <class>com.mycompany.modelo2.Libro</class>
        <class>com.mycompany.modelo2.Categoria</class>
        
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/peluqeria_canina_jpa?serverTimezone=UTC"/>
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="456789" />
            <property name="hibernate.hbm2ddl.auto" value="update" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            
        </properties>
    </persistence-unit>
</persistence>

Espero que esto solucione tu problema. Si sigues teniendo dificultades, por favor, avísame para que pueda ayudarte más. ¡Buena suerte con tus ejercicios de Hibernate!

Espero haber ayudado y buenos estudios!

Muchísimas gracias por ayudarme a resolverlo, Evelyn, y por la orientación! :D