看代码说话:)
我们举个简单的例子,一个blog有用户User,文章BlogEntity,文章分类Category以及现在很流行的Tag.(为了简单,这里例子举的是单用户,及不需要考虑Category,Tag与User的对应关系)
1:一个User对应多篇BlogEntity
2:一篇BlogEntity可以对应多个Tag,对应多个Category,对应一个User
3:一个Category对应多个BlogEntity
4:一个Tag对应多个BlogEntity
OK,这四个对象简单的关系为:
1:User和BlogEntity是一对多的关系
2:BlogEntity和Category是多对多的关系
3:BlogEntity和Tag是多对多的关系
User.java
package martin.xpost.model;
import martin.xpost.hibernate.UserDAO;
import martin.xpost.util.ListUtil;
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_user"
*/
public class User extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String userName;
/**
* @hibernate.property not-null="true"
*/
private String password;
/**
* @hibernate.property
*/
private String realName;
/**
* @hibernate.property
*/
private String email;
/**
* @hibernate.set table="t_blogentity" lazy="true" inverse="true" cascade="all-delete-orphan"
* @hibernate.key column="userid"
* @hibernate.one-to-many class="martin.xpost.model.BlogEntity"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
import martin.xpost.hibernate.UserDAO;
import martin.xpost.util.ListUtil;
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_user"
*/
public class User extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String userName;
/**
* @hibernate.property not-null="true"
*/
private String password;
/**
* @hibernate.property
*/
private String realName;
/**
* @hibernate.property
*/
private String email;
/**
* @hibernate.set table="t_blogentity" lazy="true" inverse="true" cascade="all-delete-orphan"
* @hibernate.key column="userid"
* @hibernate.one-to-many class="martin.xpost.model.BlogEntity"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
BlogEntity.java
package martin.xpost.model;
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_blogentity"
*/
public class BlogEntity extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String title;
/**
* @hibernate.property
*/
private String shortBrief;
/**
* @hibernate.property
*/
private String content;
/**
* @hibernate.many-to-one column="userid" not-null="true"
*/
private User user;
/**
* @hibernate.set table="t_category_blogentity" lazy="true" cascade="none"
* @hibernate.key column="blogentityid"
* @hibernate.many-to-many class="martin.xpost.model.Category" column="categoryid"
*/
private Set categories;
/**
* @hibernate.set table="t_blogentity_tag" lazy="true" cascade="none"
* @hibernate.key column="blogentityid"
* @hibernate.many-to-many class="martin.xpost.model.Tag" column="tagid"
*/
private Set tags;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_blogentity"
*/
public class BlogEntity extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String title;
/**
* @hibernate.property
*/
private String shortBrief;
/**
* @hibernate.property
*/
private String content;
/**
* @hibernate.many-to-one column="userid" not-null="true"
*/
private User user;
/**
* @hibernate.set table="t_category_blogentity" lazy="true" cascade="none"
* @hibernate.key column="blogentityid"
* @hibernate.many-to-many class="martin.xpost.model.Category" column="categoryid"
*/
private Set categories;
/**
* @hibernate.set table="t_blogentity_tag" lazy="true" cascade="none"
* @hibernate.key column="blogentityid"
* @hibernate.many-to-many class="martin.xpost.model.Tag" column="tagid"
*/
private Set tags;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
Category.java
package martin.xpost.model;
import java.util.Set;
/**
* @author martin
* @hibernate.class table="t_category"
*/
public class Category extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String categoryName;
/**
* @hibernate.property
*/
private String description;
/**
* @hibernate.set table="t_category_blogentity" lazy="true" cascade="none"
* @hibernate.key column="categoryid"
* @hibernate.many-to-many class="martin.model.xpost.BlogEntity" column="blogentityid"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
import java.util.Set;
/**
* @author martin
* @hibernate.class table="t_category"
*/
public class Category extends PersistentImpl {
/**
* @hibernate.property not-null="true"
*/
private String categoryName;
/**
* @hibernate.property
*/
private String description;
/**
* @hibernate.set table="t_category_blogentity" lazy="true" cascade="none"
* @hibernate.key column="categoryid"
* @hibernate.many-to-many class="martin.model.xpost.BlogEntity" column="blogentityid"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
Tag.java
package martin.xpost.model;
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_tag"
*/
public class Tag extends PersistentImpl {
/**
* @hibernate.property
*/
private String tagName;
/**
* @hibernate.set table="t_blogentity_tag" lazy="true" cascade="none"
* @hibernate.key column="tagid"
* @hibernate.many-to-many class="martin.xpost.model.BlogEntity" column="blogentityid"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
import java.util.Set;
/**
* @author martin
* @version 1.0
* @hibernate.class table="t_tag"
*/
public class Tag extends PersistentImpl {
/**
* @hibernate.property
*/
private String tagName;
/**
* @hibernate.set table="t_blogentity_tag" lazy="true" cascade="none"
* @hibernate.key column="tagid"
* @hibernate.many-to-many class="martin.xpost.model.BlogEntity" column="blogentityid"
*/
private Set blogEntities;
//----------------------------------------------------------------
/// getter and setter
//----------------------------------------------------------------
}
----------------------------------------------------------------------------
----------------------------------------------------------------------------
好了,这个没什么好说的,看代码就知道怎么用了,下面我们通过ant生成hbm.xml文件.
一:下载xdoclet 2: http://xdoclet.codehaus.org
二:编写ant脚本
<?xml version="1.0"?>
<project name="xpost" default="init">
<property name="src.java.dir" value="src"/>
<property name="build.dir" value="WEB-INF/classes"/>
<property name="hbm.dir" value="WEB-INF/classes"/>
<property name="xdoclet.lib.dir" value="build/lib/xdoclet"/>
<property name="build.lib.dir" value="build/lib/runtime"/>
<path id="xdoclet.class.path">
<fileset dir="${xdoclet.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<path id="build.class.path">
<fileset dir="${build.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<target name="compile">
<javac srcdir="${src.java.dir}"
destdir="${build.dir}"
classpathref="build.class.path"/>
</target>
<target name="removehbm">
<delete dir="${src.java.dir}" includes="**/model/*.xml"/>
</target>
<target name="hibernatedoclet"
depends="removehbm"
description="Generate Persistence and form classes">
<taskdef
name="xdoclet"
classname="org.xdoclet.ant.XDocletTask"
classpathref="xdoclet.class.path"/>
<xdoclet>
<!-- defines the file handled by xdoclet2 -->
<fileset dir="${src.java.dir}">
<include name="**/model/*.java"/>
</fileset>
<!-- defines the processing of a plugin -->
<component
classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"
destdir="${src.java.dir}"
version="3.0"/>
</xdoclet>
</target>
<target
name="jarhbm"
depends="hibernatedoclet">
<jar
basedir="${src.java.dir}"
&nb
<project name="xpost" default="init">
<property name="src.java.dir" value="src"/>
<property name="build.dir" value="WEB-INF/classes"/>
<property name="hbm.dir" value="WEB-INF/classes"/>
<property name="xdoclet.lib.dir" value="build/lib/xdoclet"/>
<property name="build.lib.dir" value="build/lib/runtime"/>
<path id="xdoclet.class.path">
<fileset dir="${xdoclet.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<path id="build.class.path">
<fileset dir="${build.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<target name="compile">
<javac srcdir="${src.java.dir}"
destdir="${build.dir}"
classpathref="build.class.path"/>
</target>
<target name="removehbm">
<delete dir="${src.java.dir}" includes="**/model/*.xml"/>
</target>
<target name="hibernatedoclet"
depends="removehbm"
description="Generate Persistence and form classes">
<taskdef
name="xdoclet"
classname="org.xdoclet.ant.XDocletTask"
classpathref="xdoclet.class.path"/>
<xdoclet>
<!-- defines the file handled by xdoclet2 -->
<fileset dir="${src.java.dir}">
<include name="**/model/*.java"/>
</fileset>
<!-- defines the processing of a plugin -->
<component
classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"
destdir="${src.java.dir}"
version="3.0"/>
</xdoclet>
</target>
<target
name="jarhbm"
depends="hibernatedoclet">
<jar
basedir="${src.java.dir}"
&nb
相关推荐
3. `org-netbeans-modules-xdoclet-0.5.nbm`:XDoclet是一个基于Javadoc的工具,可以自动生成各种代码,包括Hibernate所需的元数据文件。这个模块可能用于自动化Hibernate的配置。 4. `org-jdom-0.5.nbm`:JDOM是一...
3. **Hibernate实体类与映射文件**:对于使用Hibernate的对象/关系映射框架,xdoclet可以从模型类的Javadoc注释中自动生成Hibernate的.hbm.xml映射文件和实体类。 4. **JMX(Java Management Extensions)支持**:...
描述中的“Select the home directory for XDoclet. 1.2.1,解决方法”提供了一个解决这个问题的提示。设置XDoclet的家目录通常涉及到以下几个步骤: 1. 下载xdoclet-1.2.1.zip文件并解压到一个合适的目录,例如`C:...
This chapter focuses on using XDoclet for data persistence, including ORM frameworks like Hibernate. Key topics include: - **Data Persistence Overview**: An introduction to data persistence in Java ...
本下载包与书籍的实战篇紧密... * 给出for hibernate 3的xdoclet例子 v1.1 (2005.5.25) * 分离db目录下的build.xml * 增加了对投票的图形显示 * 修正了和webwork相关的一个中文bug v1.0 (2005.4.20) * 初始版本
5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化...
本书有丰富的附录部,在附录中讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书中所用的工具及软件,附录最后一部分是“快速启动代码”,供...
<br/> 版本更新 ----------- v1.2 (PLAN,TBD) * 转换到JTA * 给出一个脱离DAO模式的例子 * 给出for hibernate 3的xdoclet例子 <br/>v1.1 (2005.5.25) * 分离db目录下的...
5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化...
5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化...
5.4.1. 使用 XDoclet 标记 5.4.2. 使用 JDK 5.0 的注解(Annotation) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection ...
结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式 3.2. 获取SessionFactory 3.3. 用户自行提供JDBC连接 3.4. Hibernate提供的JDBC...
5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化...
5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类...
5.4.1. 使用 XDoclet 标记 5.4.2. 使用 JDK 5.0 的注解(Annotation) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection ...
2. `org-netbeans-modules-xdoclet.nbm`:这是NetBeans IDE的xdoclet模块,提供了对xdoclet的集成支持。这个模块使开发者可以直接在NetBeans环境中利用xdoclet的功能,无需离开IDE即可处理注解和生成代码,提升了...
2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...
5.5.1. Using XDoclet markup 5.5.2. Using JDK 5.0 Annotations 5.6. Generated Properties 5.7. Auxiliary Database Objects 6. Collection Mapping 6.1. Persistent collections 6.2. Collection mappings 6.2.1....
2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC...