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