当前位置: 首页 > 知识库问答 >
问题:

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

颛孙镜
2023-03-14

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

    }
}

共有1个答案

左丘成仁
2023-03-14

问题是--在Hibernate5.x及更早版本中--方言org.Hibernate.dialt.mysqldialice适用于MySQL4.x或更早版本。由这种方言生成的片段type=myisam在MySQL4.0中被弃用,在5.5中被删除。

如果您使用MariaDB,则需要使用(取决于MariaDB的版本,也可能是Hibernate的版本)以下一个:

  • org.hibernate.dialt.mariadbdialog
  • org.hibernate.dialt.mariadb53diagence
    null
 类似资料:
  • 问题内容: 我的Java代码出现此错误 这是hibernate传递的查询: 我已经查看了与此错误有关的所有问题。但是在所有这些问题中,用户本身都在传递查询“ ”,因此他们可以将“ ” 更改为“ ”,但是hibernate在这里负责创建表,因此我不知道错误在哪里以及如何解决。 这是我的配置文件: 这是我的映射文件: 这是我的课程文件: 问题答案: 问题是该方言适用于MySQL 4.x或更早版本。由该

  • 尝试使用 HQL 从表中获取记录时出现错误 原因:com . Mysql . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:您的SQL语法有错误;请查阅与您的MySQL服务器版本相对应的手册,了解使用near '的正确语法。userinfo userinfo 0 _ where userinfo 0 _。login_id='musk

  • 问题内容: 我有一个JPA / Hibernate数据模型,正在使用Hibernate hbm2ddl工具生成数据库DDL。我在数据库中有一些应该是CHAR的字符串,有些可能是VARCHAR。我想最小化DDL的手动编辑(我意识到有些事情必须发生)。 有人知道我应该怎么做吗?我意识到我可以通过被破解的方言来制作所有Strings VARCHARS或CHARS,但这并不是数据库中总是合适的方法。 我希

  • 问题内容: 从未见过这样的错误: 错误[22P02]错误:整数的无效输入语法:“”;执行查询时出错 创建表: 更新代码: 查询看起来完全像这样: 我有很多表在其中运行类似的命令,但从未见过这样的错误。 可能是什么问题? 问题答案: 我建议阅读手册中的“ 常量 ”一章。这是一篇简短且内容丰富的文章。 错误消息的原因是,这是一个 空字符串 ,没有数字类型(如)的表示形式。 @a_horse_with_

  • 问题内容: 我从数据库中删除记录时遇到问题。几个小时以来,我一直在努力弄清自己在做错什么。我在这里搜索了一些主题,但没有一个回答我在做什么错。我在数据库中制作了这3个表: 这是我的hibernate映射文件: 因此,当我尝试从jTable中删除一条记录时,它给了我一个错误。这是我用来从jTable和数据库中删除数据的代码: ServiceCheck.java 这是错误: 任何帮助将不胜感激! 问题

  • 问题内容: 我有这张桌子: 我使用这样的查询,但出现错误: 我想显示这样的表: 如何实现呢? 问题答案: 我想在您的查询的问题是, 是的,你是想选择一个空的()。 您必须解决方法: 更改为(2010,2012 ..将被视为字符串,我不知道是否可以) 放: