xDoclet在Hibernate中的用法总结

xDoclet在Hibernate中的使用

Hibernate类:
@hibernate.class
table="teacher"
Hibernate子类:
@hibernate.joined-subclass
@hibernate.joined-subclass-key
column="tea_id"
主键:
@hibernate.id
column="tea_id"
generator-class="native"
普通属性:
@hibernate.property
column="tea_name"
1:n(1对多)
1的一头:
@hibernate.set
lazy="true"
cascade="all"
inverse="true"

@hibernate.collection-keycolumn="tea_id"

@hibernate.collection-one-to-manyclass="tms.Teacher.ZBJiangCheng"

多的一头:
@hibernate.many-to-one
column="tea_id"
class="tms.Teacher.ZBTeacher"
not-null="true"
1:1(1对1)
1的一头:
@hibernate.one-to-one name="gongzi"
class="tms.Teacher.ZBGongzi"
cascade="all"

1的另一头:
@hibernate.one-to-one
name="teacher"
class="tms.Teacher.ZBTeacher"
constrained="true"

并且其主键策略应是:
@hibernate.id
column="tea_id"
generator-class="foreign"
unsaved-value="0"

@hibernate.generator-param
name="property"
value="teacher"

另一种一头维护的1:1关系
(例如:一本书对应一个图书类型,一种图书类型对应多本书,图书类型一端不需维护对应什么书,而书的一端应维护对应哪种图书类型)
@hibernate.many-to-one
name="booktype"
column="booktype_id"
cascade="all"
not-null="true"
 

这里将利用xdoclet来为hibernate生成相关代码(由Customer.java生成Customer.hbm.xml),看看xdoclet对提供工作效率的。

运行环境:
1、xdoclet
2、ant
3、hibernate
需要的jar包有

  • xdoclet-/X.X.X/.jar
  • xdoclet-hibernate-module-/X.X.X/.jar
  • xdoclet-xjavadoc-/X.X.X/.jar
  • xdoclet-xdoclet-module-/X.X.X/.jar
  • log4j-/X.X.X/.jar
  • commons-collections-2.0.jar
  • commons-logging.jar

    前四个可以从xdoclet里的lib里面找到(这里“ /X.X.X/ ” 表示版本号),后面的几个我想大家都熟了吧可以从很多地方找到。


    程序
    看下文件结构
    .(项目目录)
         |
         -src(文件夹,命名src.dir,存放源文件)
         |
         -lib(文件夹,命名lib.dir,存放上面提到的几个jar文件)
                  |
                  -*.jar
         |
         -bin(文件夹,命名bin.dir)
                 |
                 -src(文件夹,存放生成的*.java文件,这里将不用到)
                 |
                 -classes(文件夹,存放所编译的*.class文件)
       |
       -build.xml
     
    看下源程序吧。
    1、Customer.java

    /*
     * Created on 2004-12-20
     * @author roson
     */
    package hibernate;
    import java.util.Set;
    import java.util.Collections;
    /**
     * @author roson
     * @since 1.0
     * @version 1.0
     * @hibernate.class tables="customers"
     */
    public class Customer {
        /**This customer's identifier field.
         */
        private long id;
       
        /**This customer's name field.
         */
        private String name;
       
        /**The customer's orders set.
         */
        private Set orders=Collections.EMPTY_SET;
       
        /**The default construtor for Hibernate to instantiate with.
         */
        public Customer() {}
       
        /**The getter method for this Customer's identifier.
         *
         * @hibernate.id generator-class="native"
         */
        public long getId()
        {
            return id;
        }
       
        /**The setter method for this Customer's identifier.
         */
        public void setId(long id)
        {
            this.id=id;
        }
       
        /**The getter method for this Customer's name.
         *
         * @hibernate.property
         */
        public String getName()
        {
            return name;
        }
       
        /**The setter method for this Customer's name.
         */
        public void setName(String name)
        {
            this.name=name;
        }
       
        /**The getter method for this Customer's orders.
         *
         * @hibernate.set role="orders"
         *
         * @hibernate.collection-key column="customer_id"
         *
         * @hibernate.collection-one-to-many class="Order"
         */
        public Set getOrders()
        {
            return orders;
        }
       
        /**The setter method for this Customer's orders.
         */
        public void setOrders(Set orders)
        {
            this.orders=orders;
        }
    }

    可以看到在源程序中多了一些注释之类的标签,xdoclet就是通过这些标签来识别自动生成xml文件的,除此之外Customer.java与普通的javabean没什么区别。
    注意:这里Customer.java打包为hibernate,如要改动要更改一下build.xml。

    2、build.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <project name="hibernate" default="compile" basedir=".">
     <property name="src.dir" location="src"></property>
     <property name="bin.dir" value="bin"></property>
     <property name="lib.dir" location="lib"></property>
     <path id="lib.path">
     <fileset dir="${lib.dir}">
     <include name="*.jar"/>
     </fileset> 
      <pathelement location="lib/xdoclet-hibernate-module-1.2.1.jar"/>
     </path>
     <target name="init">
      <tstamp>
      <format property="TODAY" pattern="yy-mm-d"/>
      </tstamp>
      <mkdir dir="bin"/>
      <mkdir dir="${bin.dir}/src"/>
      <mkdir dir="${bin.dir}/classes"/>
      <taskdef   name="hibernatedoclet"
         classname="xdoclet.modules.hibernate.HibernateDocletTask"
         classpathref="lib.path"
        />
      
      <taskdef name="ejbdoclet"
        classname="xdoclet.ejb.EjbDocletTask"
        classpathref="lib.path">
      </taskdef>
     </target>


     <target name="compile" depends="init,hibernate">
     <javac srcdir="${src.dir};${bin.dir}/src" destdir="${bin.dir}/classes">
     <classpath refid="lib.path"></classpath>
     </javac>
     </target>
     

     <target name="hibernate" depends="init">
      <hibernatedoclet
       destdir="${bin.dir}"
       mergedir="${bin.dir}"
       force="${bin.dir}"
       excludedtags="@version,@author,@todo"
       addedtags="@xdoclet-generated at ${TODAY},@copyright netone,@author roson,@version ${version}"
       verbose="false"
       >
       <fileset dir="${src.dir}">
       <include name="*.java"/>
       </fileset>
       <hibernate version="2.0"/>
      </hibernatedoclet>
     </target>
     
     
     <target name="clean">
     <delete dir="${bin.dir}"></delete>
     </target>
    </project>

    build.xml文件通过ant来运行。首先 请确保ant能够运行,接着 打开 命令提示行(在运行那里输入cmd),转到上面结构所提的“项目目录”,直接输入  ant    就行。
    注意:
    最让我烦恼的就是 taskdef 部分。原因就是没有把所需要的jar包放进 lib 文件夹。并且要理解的是,它所需的classname="xdoclet.modules.hibernate.HibernateDocletTask"  ,并不仅仅要求含有HibernateDocletTask.class这个文件的包,而是同时需要几个包同时存在。希望大家不要在犯同样的错误。

    好了,大体就是这样了。可以参照http://www.hibernate.org/72.html



  • 你可能感兴趣的:(Hibernate,xml,log4j,ant,ejb)