2017-05-03 20 views
0

我正在使用Spring框架開發一個web應用程序,並使用Hibernate來支持持久層。我已經知道我可以用下面的代碼定製我自己的方言:Java中不同的MySQL引擎彈簧

public class MySQL5Dialect extends MySQL5InnoDBDialect { 

    @Override 
    public String getTableTypeString() { 
     return " ENGINE=InnoDB DEFAULT CHARSET=utf8"; 
    } 
} 

但是,這適用於所有表格。現在我有不同的MySQL存儲引擎的表。例如,一個表格使用InnoDB,另一個表格使用MyISAM。我該如何做到這一點?提前致謝。

+0

使用hibernate的主要好處是您的數據庫詳細信息對開發人員是隱藏的 - 這使得它可能更容易在數據庫供應商或版本之間遷移。如果你深入到數據庫中,可能需要考慮使用其他技術來設置表格(如flyway),然後將你的休眠映射到(手動)創建的表格上? – Jan

+0

@Jan謝謝。但如果我不想手動使用本地SQL創建表,並且我的數據庫絕對是MySQL。沒有辦法用不同的引擎創建表格嗎? –

+0

除了InnoDB以外,沒有什麼好的理由來創建任何新表。 (如果您認爲存在,我們可以討論。) –

回答

0

一些問題,我覺得強制回答一個步驟,並質疑前提。

前提是你想使用不同的引擎?迴應是 - 只使用InnoDB。

你的計數器是 - 但不是MyISAM更快?

答案是 - 這是一個老太太的故事。很可能您的應用程序(不管它是什麼)將以更快的速度運行與所有InnoDB相比,使用任何MyISAM。

+0

如果我只使用InnoDB,所有表的主鍵應該是「AUTO_INCREMENT」,根據其聚集的B-tree索引,它不應該很長,對嗎?如果我想使用UUID作爲主鍵,我應該更改爲MyISAM嗎? –

+0

UUID是非常大的表(在任何引擎中)的性能殺手。 MyISAM正在消失;實際上沒有什麼好的理由去改變它。 –