實體類字段眾多且涉及繼承關係時,手寫 .hbm.xml 易錯且難維護。本文演示如何利用 Ant 腳本調用 XDoclet,讀取 Java 文件中的 Javadoc 註解(@hibernate.*),自動生成映射文件與主鍵策略配置。
xdoclet.jar、xdoclet-hibernate-module.jar 等)至 ${xdoclet.lib.home}。@hibernate.class table="Users"、@hibernate.id generator-class="assigned"、@hibernate.property、@hibernate.set 等。/** @hibernate.class table="Users" */
public class User {
/** @hibernate.id generator-class="assigned" column="LogonID" */
public String getUserID() { ... }
/** @hibernate.property column="Name" type="string" */
public String getUserName() { ... }
/** @hibernate.set role="contacts" table="Contacts" cascade="all"
* @hibernate.collection-key column="User_ID"
* @hibernate.collection-one-to-many class="dbdemo.Contact" */
public Set getContacts() { ... }
}
<property name="xdoclet.lib.home" value="c:/java_api/xdoclet-1.2b3/lib"/>
<target name="hibernate" depends="prepare">
<taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask">
<classpath><fileset dir="${xdoclet.lib.home}"><include name="*.jar"/></fileset></classpath>
</taskdef>
<hibernatedoclet destdir="." excludedtags="@version,@author,@todo" force="true" verbose="true" mergedir="${dist}">
<fileset dir="."><include name="**/dbdemo/*.java"/></fileset>
<hibernate version="2.0"/>
</hibernatedoclet>
</target>
build.xml。hibernate target,生成的 *.hbm.xml 將輸出至源碼同目錄或 merdir 指定目錄。XDoclet 已停止維護,現代項目建議:
@Entity、@Id、@OneToMany 等)。hibernate-tools (Ant/Maven/Gradle 插件) 或 IDE 插件直接從註解生成 hbm.xml 或導出 DDL。