運行hbm2java工具和hbm2ddl工具,hbm2javahbm2ddl
以下內容整理自《精通hibernate》 第二版
Hibernate提供了從對應檔到Java原始碼的轉換工具,名為hbm2java工具,可以利用ANT工具來運行它。
<span style="font-size:18px;"><target name="codegen" depends="prepare"> <taskdef name="hbm2javaTask" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path" /> <hbm2javaTask destdir="${source.root}" <configuration configurationfile="${class.root}/hibernate.cfg.xml" /> <hbm2java/> </hbm2javaTask><target> </span>
以上代碼定義了一個hbm2javaTask任務,它的destdir屬性指定Java源檔案存放在${source.root}目錄(即src子目錄)下,<configuration>子項目指定Hibernate的設定檔為classes/hibernate.cfg.xml。hibernate.cfg.xml檔案是XML格式的設定檔。hbm2javaTask任務重的<hbm2java>子任務就是Hibernate提供的hbm2java工具,它能根據hbm.xml對應檔產生java源檔案。
<hbm2java>任務還可以包含兩個屬性“jdk5”和“ejb3”,用法如下:
<hbm2java jdk5="true|false" ejb3="true|false">
<hnm2java>任務的jdk5屬性指定是否在產生的原始碼中包含JDK5的文法特性,ejb3屬性指定是否在產生的Java原始碼中包含ejb3的特徵,這兩個屬性的預設值都是false。
Hibernate提供了從對應檔到資料庫Schema的轉換工具,名為hbm2ddl工具,使用hbm2ddl工具時,必須在Hibernate的設定檔中設定hibernate.dialect屬性,顯示指定底層資料庫的SQL方言,因為hbm2ddl工具會根據資料庫的SQL方言來產生相應的資料庫Schema。
<span style="font-size:18px;"><target name="schema" depends="compile"> <taskdef name="hbm2javaTask" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path" /> <hbm2javaTask destdir="${schema.dir}" <configuration configurationfile="${class.root}/hibernate.cfg.xml" /> <hbm2ddl export="true" console="true" create="true"/> drop="true" outputfilename="sampledb.sql" /> </hbm2javaTask><target> </span>
以上代碼定義了一個hbm2ddlTask任務,它的destdir屬性指定產生的DDL指令檔存放在${schema.dir}目錄(即schema子目錄)下,<configuration>子項目指定Hibernate的設定檔為classes/hibernate.cfg.xml。hbm2ddlTask任務重的<hbm2ddl>子任務就是Hibernate提供的hbm2ddl工具,它能根據hbm.xml對應檔產生相應的資料表。
<hbm2ddl>任務屬性
export如果為true,表示會在資料庫中執行所產生的DDL指令碼。預設為true
drop如果為true,表示會產生刪除資料庫中表的DDL指令碼。預設為true
create如果為true,表示會產生建立資料庫中表的DDL指令碼。預設為true
outputfilename指定存放DDL指令碼的檔案
update如果為true,表示會對比現有資料庫及對應檔,產生用於累加式更新資料庫的DDL。值得注意的是,不能正式投入啟動並執行資料庫中採用這種累加式更新。因為它目前還不是非常健壯,不能保證產生準確的累加式更新DDL,也不能保證底層資料庫可以順利執行累加式更新DDL。預設值為false
haltonerror如果為true,表示遇到錯誤時會終止運行ANT工程。預設值為false
format設定DDL指令碼中SQL語句的格式
delimiter為DDL指令碼設定行結束符
console如果為true,表示會在控制台顯示產生DDL指令碼。預設值為true