org java mysql hibernate mariadb

java - org - hibernate mariadb dialect



Error de sintaxis no vĂ¡lido "type=MyISAM" en DDL generado por Hibernate (3)

Estoy recibiendo este error para mi código Java

Caused by :`com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException`: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB` server version for the right syntax to use near ''type = `MyISAM`'' at line 1

Esta es la consulta pasada por hibernación:

Hibernate: create table EMPLOYEE (emp_id integer not null, FNAME varchar(255), LNAME varchar(255), primary key (emp_id)) type=MyISAM

He mirado todas las preguntas relacionadas con este error. Pero en todas las preguntas, el usuario mismo está pasando la consulta " type = MyISAM " para que puedan cambiar " type " a " engine ", pero aquí hibernate es responsable de crear la tabla, por lo que no entiendo dónde está el error y cómo Puedo arreglarlo.

Este es mi archivo de configuración:

<hibernate-configuration> <session-factory > <property name="hibernate.hbm2ddl.auto">create</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/servletcheck</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"> </property> <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <mapping resource="Employee.hbm.xml"/> </session-factory> </hibernate-configuration>

Este es mi archivo de mapeo:

<hibernate-mapping> <class name="first.Employee" table="EMPLOYEE"> <id name="id" type="int"> <column name="emp_id" /> <generator class="assigned" /> </id> <property name="fname" type="java.lang.String"> <column name="FNAME" /> </property> <property name="lname" type="java.lang.String"> <column name="LNAME" /> </property> </class> </hibernate-mapping>

Este es mi archivo de clase:

public class StoreData { public static void main(String[] args) { Configuration cfg=new Configuration(); cfg.configure("hibernate.cfg.xml"); SessionFactory factory=cfg.buildSessionFactory(); Session session=factory.openSession(); org.hibernate.Transaction t=session.beginTransaction(); Employee e=new Employee(); e.setId(1); e.setFname("yogesh"); e.setLname("Meghnani"); session.persist(e); t.commit(); } }



El problema es que el dialecto org.hibernate.dialect.MySQLDialect es para MySQL 4.x o anterior. El fragmento TYPE=MYISAM generado por este dialecto quedó obsoleto en MySQL 4.0 y se eliminó en 5.5.

Dado que usa MariaDB, necesita usar (dependiendo de la versión de MariaDB y, quizás, la versión de Hibernate) una de:

  • org.hibernate.dialect.MariaDBDialect
  • org.hibernate.dialect.MariaDB53Dialect

Si está utilizando MySQL, o si los dos dialectos anteriores para MariaDB no existen en su versión de Hibernate:

  • org.hibernate.dialect.MySQL5Dialect
  • org.hibernate.dialect.MySQL55Dialect
  • org.hibernate.dialect.MySQL57Dialect

Es un problema relacionado con el dialecto, en lugar de org.hibernate.dialect.MySQLDialect puede ir con org.hibernate.dialect.MySQL5Dialect . Funcionará felizmente.