1、 5 6 7 src.dir./src 8 9 prj.dir./10 11 12 path id=xdoclet.task.classpath description=xdoclet的所有jar13 fileset dir=$xdoclet.plugin.install.dir14 include name=*/*.jar15 16 17 18 prj.jar项目目录下的所有jar19 $prj.dir20 21 22 23 28 runtime.pathSchemaExport用的jar和class文件29 path refid=30 31 pathelement location=$pr
2、j.dir/build/classes32 33 34 38 target name=clean清空已有的hbm.xml39 echo message=40 delete dir=src41 */po/*.hbm.xml42 43 44 45 46 xdoclet2hbm根据pojo生成hbm.xml depends=47 48 taskdef name=xdoclet classname=org.xdoclet.ant.XDocletTask classpathref=49 xdoclet encoding=50 $src.dir51 */po/*.java52 53 component c
3、lassname=org.xdoclet.plugin.hibernate.HibernateMappingPlugin destdir=$basedir/$src.dir version=3.054 55 56 57 58 hbm2java根据hbm.xml文件生成pojo59 60 org.hibernate.tool.ant.HibernateToolTask61 hbm2java destdir=62 configuration configurationfile=$src.dir/hibernate.cfg.xml63 64 65 66 67 71 SchemaExport根据hib
4、ernate.cfg.xml生成数据库环境72 73 schemaexportorg.hibernate.tool.hbm2ddl.SchemaExportTask74 schemaexport config= quiet=false text= drop= delimiter=; output=schema-export.sql75 76 77 脚本很详细,看注释即可。在使用xdoclet2hbm前,需要在pojo上设定javadoc注释,以告诉xdoclet如何进行解析。one2one & one2many的例子:Child.java 1 package po; 2 3 /* 4 * hi
5、bernate.class table=child 5 */ 6 SuppressWarnings(serial) 7 public class Child implements java.io.Serializable 8 9 /xdoclet注释有写在getter上与写在field上2种方法。10 /写在field上会自动生成access=field,所以写在getter上更常用一些。11 12 private String id;13 private String name;14 private Father father;15 16 /*17 * hibernate.id genera
6、tor-class=uuid.hex column=id length=3218 */19 public String getId() 20 return this.id;21 22 23 public void setId(String id) 24 this.id = id;25 26 27 /基本支持所有的hibernate 属性,所以想要啥设置就大胆的写吧28 /*29 * hibernate.property column=name not-null=true type=java.lang.String lazy=30 */31 public String getName() 32
7、return this.name;33 34 35 public void setName(String name) 36 this.name = name;37 38 39 /*40 * hibernate.many-to-one column=father_id41 */42 public Father getFather() 43 return this.father;44 45 46 public void setFather(Father father) 47 this.father = father;48 49 50 Father.java 3 import java.util.H
8、ashSet; 4 import java.util.Set; 5 6 /* 7 * hibernate.class table=father 8 */ 9 SuppressWarnings(10 public class Father implements java.io.Serializable 13 14 private String name;16 private Integer age;17 18 private Set children = new HashSet(0);19 20 /*21 * hibernate.id generator-class=22 */23 public
9、 String getId() 24 return this.id;27 public void setId(String id) 28 this.id = id;29 30 31 /*32 * hibernate.property column=33 */34 public String getName() 35 return this.name;36 37 38 public void setName(String name) 39 this.name = name;40 41 42 /*43 * hibernate.property column=agejava.lang.Integer
10、44 */45 public Integer getAge() 46 return age;47 48 49 public void setAge(Integer age) 50 this.age = age;51 52 53 /*54 * hibernate.set table=55 * hibernate.key column=56 * hibernate.one-to-many class=po.Child57 */58 public Set getChildren() 59 return children;60 61 62 public void setChildren(Set chi
11、ldren) 63 this.children = children;64 65 many2many的例子:Student.javastudent10 public class Student implements java.io.Serializable 14 private Set teachers = new HashSet27 /*28 * hibernate.property column=29 */30 public String getName() 31 return this.name;32 34 public void setName(String name) 35 this
12、.name = name;38 /*39 * hibernate.set table=student_teacher_relation40 * hibernate.key column=student_id41 * hibernate.many-to-many class=po.Teacherteacher_id42 */43 public Set getTeachers() 44 return teachers;45 46 47 public void setTeachers(Set students = new HashSetpo.Student getStudents() 44 return students;47 public void setStudents(Set students) 48 this.students = students;50 51 总结:1.本文没有涉及hibernate annnotation模式,需要者请自行查阅相关资料。2.XDoclet2没有XDoclet1代好找,推荐一个网址 Jar Search Engine3.本文未能涉及在开发中,程序运转时遇到DB schema结构变化而进行的动态自动转换技术。如有高人知晓,请不吝赐教。