Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] Usar MySQL en lugar de H2

Hola, soy principiante y me ha surgido una duda ¿Como puedo utilizar MySQL para esta clase? He intentado modificar el código del profesor en el persistence y pom pero me sale la siguiente exception:

Exception in thread "main" java.lang.ExceptionInInitializerError

Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.mysql.cj.jdbc.Driver]

Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.mysql.cj.jdbc.Driver

Esto es lo que tengo en persistence:

<?xml version="1.0" encoding="UTF-8"?>	

<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="tienda" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/tienda" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="1234" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>

    </persistence-unit>

</persistence>

y esto es lo que tengo en el pom:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.latam.alura.tienda</groupId>
  <artifactId>tienda</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.14.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.24</version>
        </dependency>
    </dependencies>
</project>

Gracias de antemano.

1 respuesta
solución!

Hola Sidney,

Tu configuración parece correcta en general. Sin embargo, el error que indica que tu aplicación no puede encontrar la clase del controlador JDBC de MySQL. Esto puede ser causado por una falta de correspondencia entre la versión del controlador y la versión de MySQL que estás utilizando.

En tu archivo pom.xml, estás utilizando la versión 5.1.24 del controlador JDBC de MySQL (mysql-connector-java). Sin embargo, en tu archivo de persistencia, estás utilizando com.mysql.cj.jdbc.Driver, que es el nombre de la clase del controlador para las versiones 8.0 y posteriores del controlador JDBC de MySQL.

Si estás utilizando una versión de MySQL anterior a la 8.0, deberías cambiar el nombre de la clase del controlador en tu archivo de persistencia a com.mysql.jdbc.Driver. Si estás utilizando MySQL 8.0 o posterior, deberías actualizar la versión del controlador en tu archivo pom.xml a una versión compatible, como la 8.0.13 o posterior.

Aquí te dejo un ejemplo de cómo debería verse tu dependencia en el pom.xml si estás utilizando MySQL 8.0 o posterior:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>

Es importante de que todas las partes del sistema estén utilizando versiones compatibles de las bibliotecas y controladores.

Espero haber ayudado. Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios