论坛首页 Java版 Hibernate

hibernate进阶篇之xdoclet自动生成mapping文件

浏览 12305 次
该帖已经被评为精华帖
作者 正文
时间:2004-02-12
本篇文章采用的例子请看《hibernate入门篇之新增功能!》的系列文章。
读本文之前,假设你对eclipse和ant有了一定的了解。

1.开发环境 jsdk1.4.2 eclipse2.1.2 hibernate2.1.1 xdoclet1.2 eclipse2.1.2->ant1.5.3

2.eclipse中ant的问题解决:在eclipse>Window>Preferences>Ant>Runtime>Classpath中加上jsdk的tools.jar。
问题在: 运行ant提示需要JAVA_HOME,在eclipse中如何设置。

3.构建build.xml文件片断:
[code:1] 这是xdoclet的使用规范,其中name="hibernatedoclet",要跟下面定义的标签一样。 <taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask" classpathref="xdoclet.class.path" /> <target name="xdoclet.hibernate.mapping" depends="compile"> <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> <!-- 这里要和taskdef->name中定义的值一样。同是:hibernatedoclet --> <hibernatedoclet destdir="${build.classes}" verbose="true"> <fileset dir="${src.dir}"> <include name="**/*.java" /> </fileset> <!-- 默认为1.1,我们使用的2.X以上版本,用2.0这个版本 --> <hibernate version="2.0"/> </hibernatedoclet> </target> [/code:1] 其余有什么不懂得地方请参考资料说的内容。 4.我只那一个例子说明一下: [code:1] package com.javamodel.hibernate; import java.util.HashSet; import java.util.Set; /** * @hibernate.class * table="author" * dynamic-update="true" * dynamic-insert="true" * 这个类对应的表是author */ public class Author{ private String id ; private String alias = null; private Person person = null; private Set publications = new HashSet(); private Set works = new HashSet(); /** * @hibernate.id * unsaved-value="null" generator-class="foreign" * 定义外键 * @hibernate.generator-param * name="property" value="person" * 对应的Author对应的属性 */ public String getId() { return id; } public void setId(String i) { id = i; } /** * @hibernate.property * length="20" * 声明表中对应的字段 */ public String getAlias() { return alias; } public void setAlias(String string) { alias = string; } /** * @hibernate.one-to-one * cascade="all" constrained="true" * 在Author与Person之间,声明one-to-one的关联关系 */ public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } /** * @hibernate.set * lazy="true" inverse="true" cascade="all" * 定义Hibernate <set> collection * @hibernate.collection-key * column="authorid" * 对应表中的字段 * @hibernate.collection-one-to-many * class="com.javamodel.hibernate.Publication" * 在Author与Publication之间,声明one-to-many的关联关系 */ public Set getPublications() { return publications; } public void setPublications(Set set) { publications = set; } /** * @hibernate.set * lazy="true" * table="author_work" * @hibernate.collection-key * column="author_id" * @hibernate.collection-many-to-many * column="work_id" * class="com.javamodel.hibernate.Work" */ public Set getWorks() { return works; } public void setWorks(Set set) { works = set; } } [/code:1] 5.在src中的hbm.xml文件为手写文件。build/classes的hbm.xml文件为自动生成文件。 自动生成的mapping文件没有经过测试。本文的重点在如何生成mapping文件。请谅解。 参考资料: http://dev.eclipse.org/newslists/news.eclipse.tools.jdt/msg05557.html 解决了在eclipse中使用ant发现需要JAVA_HOME的问题的出处。 O'Reilly的《Ant权威指南》。 IBM JAVA技术专区中的教程《Apache Ant 101:使 Java 项目生成易如反掌》 hibernate相关文档:http://www.hibernate.org ant相关文档:http://ant.apache.org xdoclet相关文档:http://sourceforge.net/projects/xdoclet[/code]
   
时间:2004-02-16
http://forum.javaeye.com/viewtopic.php?t=3029

通用英文没有翻译,不懂的没有翻译,翻译了的还可能不对:-(
   
0 请登录后投票
时间:2004-02-21
有个问题,一直不知道怎样处理
xdoclet的标记不能够重复用在一个方法前面吗????
hibernate.many-to-one 只被识别第一个

[code:1]
import java.util.Collection;
/**
* @author Administrator
* @hibernate.class table="BugLevel"
* To change the template for this generated type comment go to
* Window&Preferences&Java&Code Generation&Code and Comments
*/
public class BugLevel extends SprFunc{

private Collection roleModules;

/**
* @hibernate.set name="roleModules" table="role_module" cascade="all" inverse="true" lazy="true"
* @hibernate.collection-key column="bugLevelId"
* @hibernate.collection-composite-element class="net.gemfree.tmanager.persistent.RoleModule"
* @hibernate.many-to-one name="bugPreference" column="bugPreferenceId" class="net.gemfree.tmanager.persistent.BugPreference"
* @hibernate.many-to-one name="bugStatus" column="bugStatusId" class="net.gemfree.tmanager.persistent.BugStatus"
* @hibernate.many-to-one name="module" column="modId" class="net.gemfree.tmanager.persistent.Module"
* @hibernate.many-to-one name="role" column="roleId" class="net.gemfree.tmanager.persistent.Role"
*
* @return Collection
*/
public Collection getRoleModules() {
return roleModules;
}

public void setRoleModules(Collection roleModules) {
this.roleModules = roleModules;
}

}
[/code:1]

[code:1]
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class
name="net.gemfree.tmanager.persistent.BugLevel"
table="BugLevel"
dynamic-update="false"
dynamic-insert="false"
>
<id
name="id"
column="id"
type="string"
length="32"
>
<generator class="uuid.hex">
</generator>
</id>

<set
name="roleModules"
table="role_module"
lazy="true"
inverse="true"
cascade="all"
sort="unsorted"
>

<key
column="bugLevelId"
/>

<composite-element
class="net.gemfree.tmanager.persistent.RoleModule"
>

<many-to-one
name="bugPreference"
class="net.gemfree.tmanager.persistent.BugPreference"
cascade="none"
outer-join="auto"
update="true"
insert="true"
/>
</composite-element>

</set>

<set
name="sprs"
lazy="true"
inverse="true"
cascade="save-update"
sort="unsorted"
>

<key
column="id"
/>

<one-to-many
class="net.gemfree.tmanager.persistent.Spr"
/>
</set>

<property
name="name"
type="java.lang.String"
update="true"
insert="true"
>
<column
name="name"
length="50"
not-null="false"
unique="false"
/>
</property>

<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-BugLevel.xml
containing the additional properties and place it in your merge dir.
-->

</class>

</hibernate-mapping>
[/code:1]
   
0 请登录后投票
时间:2004-02-21
已搞定
   
0 请登录后投票
时间:2004-03-25
请问是怎么解决的,我也碰到类似的问题
   
0 请登录后投票
时间:2004-04-28
太棒了,总算学会用edoclet了,太方便了,感谢楼主
   
0 请登录后投票
时间:2004-04-29
请问楼主,如何在Maven中使用xdoclet?xdocelt的文档中只有一个ejbdoclet的指南,修改为hibernatedocelt、安装maven plugin之后,总是报错,部分pojo能够正确生成,部分不行,而使用ant是没有问题的。
   
0 请登录后投票
时间:2004-04-29
maven 我没用过。不知为何物。
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐