1 在编写vo文件时候在类和字段的注释上添加xdoclet使用的信息
import java.util.Calendar; import java.util.Set; import java.io.Serializable; /** * @author Chenhui * @hibernate.class table="TB_User" */ public class User implements Serializable { private static final long serialVersionUID = -4208021481713010569L; private Long userID; private Organization organization;//机构 private Organization department;//部门 private String userSN; private String loginName; private String password; private String userName; private String email; private int sex; private String address; private Calendar birthday; private String postalCode; private String mobilePhone; private String QQ; private String MSN; private int status; private Set groups; private Set privileges; public static final int STATUS_USABLE=1;// ok to use public static final int STATUS_UNABLE=2;// deleted public static final int SEX_MALE=1; public static final int SEX_FEMALE=2; public User(){} public User(long uid){this.userID=uid;} /** * @return the userID * @hibernate.id column="UserID" generator-class="increment" unsaved-value="null" */ public Long getUserID() { return userID; } /** * @param userID the userID to set */ public void setUserID(Long userID) { this.userID = userID; } /** * @return the userSN * @hibernate.property column="UserSN" length="10" non-null="true" unique="true" */ public String getUserSN() { return userSN; } /** * @param userSN the userSN to set */ public void setUserSN(String userSN) { this.userSN = userSN; } /** * @return the loginName * @hibernate.property column="LoginName" length="20" non-null="true" unique="true" */ public String getLoginName() { return loginName; } /** * @param loginName the loginName to set */ public void setLoginName(String loginName) { this.loginName = loginName; } /** * @return the password * @hibernate.property column="Password" length="20" non-null="true" unique="false" */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } /** * @return the userName * @hibernate.property column="UserName" length="20" non-null="false" unique="false" */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the sex * @hibernate.property column="Sex" */ public int getSex() { return sex; } /** * @param sex the sex to set */ public void setSex(int sex) { this.sex = sex; } /** * @return the email * @hibernate.property column="Email" length="40" non-null="false" unique="false" */ public String getEmail() { return email; } /** * @param email the email to set */ public void setEmail(String email) { this.email = email; } /** * @return the address * @hibernate.property column="Address" length="80" non-null="false" unique="false" */ public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the birthday * @hibernate.property column="Birthday" */ public Calendar getBirthday() { return birthday; } /** * @param birthday the birthday to set */ public void setBirthday(Calendar birthday) { this.birthday = birthday; } /** * @return the postalCode * @hibernate.property column="PostalCode" length="10" non-null="false" unique="false" */ public String getPostalCode() { return postalCode; } /** * @param postalCode the postalCode to set */ public void setPostalCode(String postalCode) { this.postalCode = postalCode; } /** * @return the mobilePhone * @hibernate.property column="MobilePhone" length="20" non-null="false" unique="false" */ public String getMobilePhone() { return mobilePhone; } /** * @param mobilePhone the mobilePhone to set */ public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } /** * @return the qQ * @hibernate.property column="QQ" length="20" non-null="false" unique="false" */ public String getQQ() { return QQ; } /** * @param qq the qQ to set */ public void setQQ(String qq) { QQ = qq; } /** * @return the mSN * @hibernate.property column="MSN" length="40" non-null="false" unique="false" */ public String getMSN() { return MSN; } /** * @param msn the mSN to set */ public void setMSN(String msn) { MSN = msn; } /** * @return the status * @hibernate.property column="Status" */ public int getStatus() { return status; } /** * @param status the status to set */ public void setStatus(int status) { this.status = status; } /** * @return the organization * @hibernate.many-to-one column="OrganizationID" non-null="false" lazy="true" */ public Organization getOrganization() { return organization; } /** * @param organization the organization to set */ public void setOrganization(Organization organization) { this.organization = organization; } /** * @return the department * @hibernate.many-to-one column="DepartmentID" non-null="false" lazy="true" */ public Organization getDepartment() { return department; } /** * @param department the department to set */ public void setDepartment(Organization department) { this.department = department; } /** * @return the groups * Group来管理关联关系,默认不抓取 * @hibernate.set table="TB_UserGroup" cascade="none" inverse="true" lazy="true" * @hibernate.collection-key column="UserID" * @hibernate.collection-many-to-many column="GroupID" * class="com.sst.framework.administration.vo.Group" */ public Set getGroups() { return groups; } /** * @param groups the groups to set */ public void setGroups(Set groups) { this.groups = groups; } /** * @return the privileges * User来管理关联关系,默认不抓取 * @hibernate.set table="TB_UserPrivilege" cascade="all" inverse="false" lazy="true" * @hibernate.collection-key column="UserID" * @hibernate.collection-many-to-many column="PrivilegeID" * class="com.sst.framework.administration.vo.Privilege" */ public Set getPrivileges() { return privileges; } /** * @param privileges the privileges to set */ public void setPrivileges(Set privileges) { this.privileges = privileges; } }
2 编写ant配置文件
注意,hibernate的配置文件不须再包含映射文件,否则会出现重复错误
<?xml version="1.0"?> <project name="administration" default="hibernate" basedir="."> <property name="admin.db" value="mysql"/> <property name="admin.home" value="${basedir}"/> <property name="admin.lib" value="${admin.home}/lib"/> <property name="build.classes" value="${admin.home}/WebRoot/WEB-INF/classes"/> <property name="hibernate.cfg" value="${admin.home}/Docs/hibernate_${admin.db}.cfg.xml"/> <path id="myclasspath"> <fileset dir="${admin.lib}/hibernate3.2.6" includes="**/*.jar"/> <fileset dir="${admin.lib}/xdoclet1.2.3" includes="**/*.jar"/> <fileset dir="${admin.home}/lib" includes="**/*.jar" /> <pathelement path="WebRoot/WEB-INF/classes"/> </path> <!-- ================================================================== --> <!-- == generate Hibernate mappings --> <!-- ================================================================== --> <taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask" classpathref="myclasspath" /> <target name="hibernate" description="Generate mapping documents"> <echo>+---------------------------------------------------+</echo> <echo>| |</echo> <echo>| R U N N I N G H I B E R N A T E D O C L E T |</echo> <echo>| |</echo> <echo>+---------------------------------------------------+</echo> <hibernatedoclet destdir="${admin.home}/src" excludedtags="@version,@author,@todo,@see" addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}" force="false" verbose="true"> <fileset dir="${admin.home}/src"> <exclude name="com/vo/BaseObject.java" /> <include name="com/vo/*.java" /> </fileset> <hibernate validatexml="true" version="3.0"/> </hibernatedoclet> </target> <!-- ================================================================== --> <!-- == generate DDL with hibernate tools --> <!-- ================================================================== --> <target name="gen-ddl" description="Hibernate Tools generate DDL"> <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="myclasspath" /> <!-- generate database DDL --> <hibernatetool destdir="${admin.home}/metadata/database"> <classpath> <path location="${admin.home}/webapp/WEB-INF/classes"/> </classpath> <configuration configurationfile="${hibernate.cfg}" > <fileset dir="${admin.home}/src/com/vo"> <include name="**/*.hbm.xml"/> </fileset> </configuration> <hbm2ddl export="false" delimiter=";" format="true" outputfilename="schema_${admin.db}.sql"/> </hibernatetool> </target> </project>
3 运行ant编译生成hbm文件和DDL,注意运行顺序