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();
}
}
Como el cambio de dialecto no me funciona cuando estoy usando la base de datos MySql. La forma más sencilla es descargar y usar la versión estándar del conector Sql. Trabajó absolutamente bien.
http://www.java2s.com/Code/Jar/m/Downloadmysqlconnectorjar.htm
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.