es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La tabla no se está creando automáticamente en la base de datos.

He estado tratando de hacer que mi aplicación de Java con Hibernate se conecte a la base de datos MySQL en localhost:3306 y cree una tabla, pero no está sucediendo. Da un error. Pero el mismo código funciona cuando creo una tabla de antemano con el nombre dado y luego ejecuto la aplicación, inserta todos los datos en la tabla correspondientemente.

En el archivo hibernate.cfg.xml he intentado configurar mi “update” tanto para update como para create. Ninguno de los dos funciona cuando no hay una tabla llamada “Empleado” en la base de datos.

Según mi comprensión, cuando se establece esta opción en “Actualizar”, crea una tabla e inserta los datos (cuando la tabla no existe) y solo inserta los datos cuando la tabla ya existe.

El error es:

Hay un error en la sintaxis de su SQL; revise el manual que le corresponde a la versión de su servidor MySQL para la sintaxis correcta que debe usar cerca de ‘type=MyISAM’ en la línea 1.

Para solucionarlo he intentado todo esto:
MySQL55Dialect
MySQL57Dialect
MySQL57InnoDBDialect
MySQL5Dialect
MySQL8Dialect
MySQLDialect
MySQLInnoDBDialect
MySQLISAMDialect.

Pero no funciona

Aquí están mis códigos:

EMployee.java

App.java

hibernate.cfg.xml

pom.xml

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la sintaxis SQL que se está utilizando para crear la tabla. El mensaje de error menciona un problema con la sintaxis cerca de type=MyISAM, lo que sugiere que la consulta SQL que se está ejecutando está utilizando una sintaxis obsoleta para especificar el tipo de tabla.

    Para resolver este problema, puede intentar modificar el archivo hibernate.cfg.xml para usar un dialecto diferente para MySQL. De la lista de dialectos que ha probado, parece que ya ha experimentado con diferentes opciones, pero ninguna ha funcionado hasta ahora.

    Una posible solución es usar el dialecto org.hibernate.dialect.MySQL57InnoDBDialect. Este dialecto debería funcionar con la versión 5.7 y superior de MySQL, y debería usar el tipo de tabla InnoDB en lugar del antiguo tipo MyISAM.

    Si esto no funciona, puede intentar modificar la consulta SQL manualmente para utilizar la sintaxis correcta para su versión de MySQL. Puede hacer esto agregando un atributo dialect a su archivo hibernate.cfg.xml y luego modificando las opciones de generación de esquema de la base de datos.

    Por ejemplo, podría agregar el siguiente atributo a su archivo hibernate.cfg.xml:

    <hibernate-configuration>
      ...
      <property name="hibernate.dialect">org.hibernate.dialect.MySQL57InnoDBDialect</property>
      ...
    </hibernate-configuration>
    

    Y luego modifique la propiedad hibernate.hbm2ddl.auto para especificar que el esquema debe actualizarse (en lugar de crearse desde cero):

    <property name="hibernate.hbm2ddl.auto">update</property>
    

    Esto debería instruir a Hibernate para actualizar el esquema para que coincida con las entidades definidas en su código Java, sin eliminar y recrear la tabla desde cero.

Comments are closed.