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


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

 

當使用的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了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM