1. 程式人生 > >hibernate自動建表到資料庫及spring下自動建表到資料庫

hibernate自動建表到資料庫及spring下自動建表到資料庫

Hibernate支援自動建表,在開發階段很方便,可以保證hbm與資料庫表結構的自動同步。

如何使用呢?很簡單,只要在hibernate.cfg.xml里加上如下程式碼

Xml程式碼<property name="hbm2ddl.auto">update</property>  

update:表示自動根據model物件來更新表結構,啟動hibernate時會自動檢查資料庫,如果缺少表,則自動建表;如果表裡缺少列,則自動新增列。

還有其他的引數:
create:啟動hibernate時,自動刪除原來的表,新建所有的表,所以每次啟動後的以前資料都會丟失。

create-drop:啟動hibernate時,自動建立表,程式關閉時,自動把相應的表都刪除。所以程式結束時,表和資料也不會再存在。

PS:資料庫要預先建立好,因為hibernate只會建表,不會建庫

==========================================


表結構和資料總是在程式執行的時候無端的修改,折騰了好長時間,查了很長時間hibernate的資料庫對映檔案和介面程式,始終沒有發現有什麼錯誤,到最後才發現了它!
           <property name="hibernate.hbm2ddl.auto" value="update" />
解釋如下:

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

其實這個引數的作用主要用於:自動建立|更新|驗證資料庫表結構。
如果沒有此方面的需求建議set value="none".

其它幾個引數的意思:

validate               載入hibernate時,驗證建立資料庫表結構
create                  每次載入hibernate,重新建立資料庫表結構
create-drop        載入hibernate時建立,退出是刪除表結構
update                 載入hibernate自動更新資料庫結構

如果發現數據庫表丟失或新增,請檢查hibernate.hbm2ddl.auto的配置 可設定 <property name="hibernate.hbm2ddl.auto" value="none" />

建議在開發環境下使用,在生產環境下去掉。

優點:

1、自動建立新表

2、自動建立新欄位

3、自動修改欄位型別

缺點:

1、不會自動刪除表

2、不會自動刪除欄位

3、自動建立的新欄位只能是在最後。

針對缺點的建議:定期把資料庫清空(刪除所有表),然後啟動專案,讓hibernate自動建立表結構和索引,當然一些初始化資料需要手工匯入。

補充:如果使用spring管理hibernate,如何建表到資料庫:

<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
  p:dataSource-ref="dataSource">
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
 </bean>
起作用的是<prop key="hibernate.hbm2ddl.auto">update</prop>這一句,自動建表