首页 > 数据库 > mysql教程 > 为什么 Hibernate 在创建 MySQL 表时会生成'type=MyISAM”的'无效语法错误”?

为什么 Hibernate 在创建 MySQL 表时会生成'type=MyISAM”的'无效语法错误”?

DDD
发布: 2024-12-04 18:59:12
原创
236 人浏览过

Why does Hibernate generate an

Hibernate 生成的 DDL 中出现无效语法错误“type= MyISAM”

问题:

尝试使用Hibernate在MySQL中创建表时,遇到以下情况error:

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
登录后复制

我搜索过类似的错误,但发现用户通常在手动传递查询时遇到此问题。在这里,Hibernate 正在生成表创建查询。在哪里可以找到错误以及如何解决它?

答案:

出现此错误是因为您的配置中使用的方言已过时。在 Hibernate 5.x 及更早版本中,org.hibernate.dialect.MySQLDialect 用于 MySQL 4.x 或更早版本。此方言生成的“TYPE=MYISAM”片段在 MySQL 4.0 中已弃用,并在 5.5 中删除。

要解决此问题,您需要更新 Hibernate 配置中的方言。如果您使用 MariaDB,根据其版本和 Hibernate 版本,您可以使用以下之一方言:

  • org.hibernate.dialect.MariaDBDialect
  • org.hibernate.dialect.MariaDB53Dialect
  • org.hibernate.dialect.MariaDB106Dialect(或更高)

如果您使用 MySQL 或您的 Hibernate 版本中不存在上述 MariaDB 方言,您可以使用以下其中一种方言:

  • org.hibernate.dialect.MySQL5Dialect
  • org.hibernate.dialect.MySQL55Dialect
  • org.hibernat e.dialect.MySQL57Dialect
  • org.hibernate.dialect.MySQL8Dialect
  • org.hibernate.dialect.MySQL57InnoDBDialect (或变体)

注意:在 Hibernate 6 中,您可以再次使用 MySQLDialect 或 MariaDBDialect,因为 Hibernate 6 方言会根据连接的版本进行自我配置。

以上是为什么 Hibernate 在创建 MySQL 表时会生成'type=MyISAM”的'无效语法错误”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板