我的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

这是hibernate传递的查询:

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

我已经看过了所有与这个错误有关的问题.但在所有这些问题中,用户本身正在传递查询"type = MyISAM",这样他们就可以将"type"更改为"engine",但在这里,hibernate负责创建表,所以我不知道错误在哪里,以及如何修复它.

这是我的配置文件:

<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>

这是我的映射文件:

<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>

这是我的班级档案:

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();

    }
}

推荐答案

问题是——在Hibernate 5中.x及更早版本——方言org.hibernate.dialect.MySQLDialect代表MySQL 4.x或更早.由这种方言生成的片段TYPE=MYISAM在MySQL 4.0中被弃用,在5.5中被删除.

考虑到您使用的是MariaDB,您需要使用(取决于MariaDB的版本,也可能是Hibernate的版本)其中一个:

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

如果您使用的是MySQL,或者您的Hibernate版本中不存在上述两种MariaDB方言:

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

Mysql相关问答推荐

嵌套MySQL语句问题

一次又一次地删除事件行

了解查询中ORDER BY的行为

如何查询一行

Ballerina SQL 中是否也应该考虑输入清理?

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

排序子查询结果并返回每个 ID 的第一行

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

在 MySQL 中跨日期和位置计算和排序实体的共现

有人可以帮我优化这个查询吗?

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

使用 SET 变量进行 MySQL 查询

了解 SQL 中的元组语法

显示值为空的所有列名

将相同的固定值插入多行

如何存储重复日期牢记夏令时

如何在 python 中逐行获取 MySQL ResultSet

在mysql中复制没有数据的数据库 struct (带有空表)

MySQL术语约束与外键的区别?

按 COUNT(*) 过滤?