【原創】Hibernate經過實體類自動建表時type=MyISAM的問題

ι 版權聲明:本文爲博主原創文章,未經博主容許不得轉載。java

 

當使用的mysql數據庫爲5.5版本時,方言須要設置爲mysql

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

 而非sql

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

 

二者設置方式的主要差異在於,Hibernate自動生成的sql 建表語句中,對數據庫存儲引擎的設置不一樣。數據庫

對於實體類User來講:spa

public class User {
    private int id;
    private String username;
    private String password;
    private String sex;
    private String address;
        .......
}

採用第一種設置,Hibernate生成的sql建表語句爲:hibernate

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自動建表成功!code

 採用第二種設置,Hibernate生成的sql建表語句爲:server

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自動建表失敗,且報錯:blog

.......
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
........

報錯緣由:rem

雖然TYPE=MyISAM 和 ENGINE=MyISAM 都是設置數據庫存儲引擎的語句 。

可是老版本的Mysql使用Type,新版本的Mysql使用ENGINE。

雖然MySQL 5.1爲向下兼容而支持這個語法,但TYPE如今已經被輕視,ENGINE纔是首選的用法。

通常狀況下咱們是無需考慮ENGINE的,除非你的mysql的默認數據庫存儲引擎爲非ENGINE了。

相關文章
相關標籤/搜索