2015年10月23日 星期五

自動生成DDL語句 (Hibernate3.x 五)

※程式設定

//SchemaExport export = new SchemaExport(HibernateUtil.getConfiguration());
SchemaExport export = new SchemaExport(new Configuration().configure());
export.create(true, false);
export.drop(true, true);
    
//SchemaUpdate update = new SchemaUpdate(new Configuration().configure());
//update.execute(true, true);
     
//SchemaValidator validator = new SchemaValidator(new Configuration().configure());
//validator.validate();

※最上面是自己寫的HibernateUtil,第一行是官方寫的

※第一個參數表示要不要在控制台輸出DDL語句

※第二個參數表示要不要真的執行

※生成是根據hibernate.cfg.xml的mapping resource,當然用其他方式也行,反正給一個設定檔就對了

※第二區塊是根據mapping resource的hbm.xml,增加新的欄位,資料庫就會跟著增加
但我試的結果 改名和修改資料型態沒用

※第三區塊是根據mapping resource的hbm.xml,會檢查欄位和資料庫有沒有對應,如不對應就會出錯,如「org.hibernate.HibernateException: Wrong column type in 帳號.EMP for column COMM. Found: float, expected: double precision」,因為資料庫是float,我hbm設double,雖然還是能運行,但如果你要驗證,就是會報錯

※XML設定

<property name="hibernate.hbm2ddl.auto">create</property>

總共有四種值,看這裡的 Table 3.7

※create: 根據mapping resource,刪除表,然後新增表,所以永遠沒資料,類似上面的第一區塊的create方法,但控制台不會輸出DDL語句

※create-drop: 根據mapping resource,刪除表,然後新增表,但session factory關閉後又刪除,所以關閉後,連表都沒了,類似上面的第一區塊的drop方法,但控制台不會輸出DDL語句

※update:類似上面的第二區區,但還要有setter/getter方法,且控制台不會輸出DDL語句,聽說較常用

※validate:等同上面的第三區塊

沒有留言:

張貼留言