ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
當使用的mysql數據庫為5.5版本時,方言需要設置為
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
而非
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
兩者設置方式的主要差別在於,Hibernate自動生成的sql 建表語句中,對數據庫存儲引擎的設置不同。
對於實體類User來說:
public class User { private int id; private String username; private String password; private String sex; private String address; ....... }
采用第一種設置,Hibernate生成的sql建表語句為:
Hibernate:
create table tuser (
id integer not null auto_increment,
username varchar(255),
password varchar(255),
sex varchar(255),
address varchar(255),
primary key (id)
) engine=MyISAM
通過Hibernate自動建表成功!
采用第二種設置,Hibernate生成的sql建表語句為:
Hibernate: create table tuser ( id integer not null auto_increment, username varchar(255), password varchar(255), sex varchar(255), address varchar(255), primary key (id) ) type=MyISAM
通過Hibernate自動建表失敗,且報錯:
....... org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement ........ Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 8 ........
報錯原因:
雖然TYPE=MyISAM 和 ENGINE=MyISAM 都是設置數據庫存儲引擎的語句 。
但是老版本的Mysql使用Type,新版本的Mysql使用ENGINE。
雖然MySQL 5.1為向下兼容而支持這個語法,但TYPE現在已經被輕視,ENGINE才是首選的用法。
一般情況下我們是無需考慮ENGINE的,除非你的mysql的默認數據庫存儲引擎為非ENGINE了。