hibernate支持自動(dòng)建表,在開發(fā)階段很方便,可以保證hbm與數(shù)據(jù)庫(kù)表結(jié)構(gòu)的自動(dòng)同步。
如何使用呢?很簡(jiǎn)單,只要在hibernate.cfg.xml里加上如下代碼
Xml代碼update
update:表示自動(dòng)根據(jù)model對(duì)象來(lái)更新表結(jié)構(gòu),啟動(dòng)hibernate時(shí)會(huì)自動(dòng)檢查數(shù)據(jù)庫(kù),如果缺少表,則自動(dòng)建表;如果表里缺少列,則自動(dòng)添加列。
還有其他的參數(shù):
create:?jiǎn)?dòng)hibernate時(shí),自動(dòng)刪除原來(lái)的表,新建所有的表,所以每次啟動(dòng)后的以前數(shù)據(jù)都會(huì)丟失。
create-drop:?jiǎn)?dòng)hibernate時(shí),自動(dòng)創(chuàng)建表,程序關(guān)閉時(shí),自動(dòng)把相應(yīng)的表都刪除。所以程序結(jié)束時(shí),表和數(shù)據(jù)也不會(huì)再存在。
PS:數(shù)據(jù)庫(kù)要預(yù)先建立好,因?yàn)閔ibernate只會(huì)建表,不會(huì)建庫(kù)
==========================================
表結(jié)構(gòu)和數(shù)據(jù)總是在程序執(zhí)行的時(shí)候無(wú)端的修改,折騰了好長(zhǎng)時(shí)間,查了很長(zhǎng)時(shí)間hibernate的數(shù)據(jù)庫(kù)映射文件和接口程序,始終沒有發(fā)現(xiàn)有什么錯(cuò)誤,到最后才發(fā)現(xiàn)了它!
解釋如下:
hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. eg. validate | update | create | create-drop
其實(shí)這個(gè)參數(shù)的作用主要用于:自動(dòng)創(chuàng)建|更新|驗(yàn)證數(shù)據(jù)庫(kù)表結(jié)構(gòu)。
如果沒有此方面的需求建議set value="none".
其它幾個(gè)參數(shù)的意思:
validate?????????????? 加載hibernate時(shí),驗(yàn)證創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)
create????????????????? 每次加載hibernate,重新創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)
create-drop??????? 加載hibernate時(shí)創(chuàng)建,退出是刪除表結(jié)構(gòu)
update???????????????? 加載hibernate自動(dòng)更新數(shù)據(jù)庫(kù)結(jié)構(gòu)
如果發(fā)現(xiàn)數(shù)據(jù)庫(kù)表丟失或新增,請(qǐng)檢查hibernate.hbm2ddl.auto的配置 可設(shè)置
建議在開發(fā)環(huán)境下使用,在生產(chǎn)環(huán)境下去掉。
優(yōu)點(diǎn):
1、自動(dòng)創(chuàng)建新表
2、自動(dòng)創(chuàng)建新字段
3、自動(dòng)修改字段類型
缺點(diǎn):
1、不會(huì)自動(dòng)刪除表
2、不會(huì)自動(dòng)刪除字段
3、自動(dòng)創(chuàng)建的新字段只能是在最后。
針對(duì)缺點(diǎn)的建議:定期把數(shù)據(jù)庫(kù)清空(刪除所有表),然后啟動(dòng)項(xiàng)目,讓hibernate自動(dòng)創(chuàng)建表結(jié)構(gòu)和索引,當(dāng)然一些初始化數(shù)據(jù)需要手工導(dǎo)入。