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

我的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负责创建表,所以我不明白错误在哪里,以及如何我可以修好它。

这是我的配置文件:

   create com.mysql.jdbc.Driver jdbc:mysql://localhost/servletcheck root    org.hibernate.dialect.MySQLDialect true    

这是我的映射文件:

               

这是我的类文件:

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

问题是方言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

它是一个与Dialect相关的问题,而不是org.hibernate.dialect.MySQLDialect你可以使用org.hibernate.dialect.MySQL5Dialect 。 它会愉快地工作。

当我使用MySql数据库时,方言更改对我不起作用。 最简单的方法是下载并使用标准版本的Sql连接器。 工作得非常好。

http://www.java2s.com/Code/Jar/m/Downloadmysqlconnectorjar.htm