`
conkeyn
  • 浏览: 1525113 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

XDoclet - discriminator标签

阅读更多

http://blog.csdn.net/chenjyuj/archive/2007/04/11/1561342.aspx


XDoclet in Action 下载地址: http://www.infoxa.com/asp/book/xxnr.asp?id=1570

 XDoclet实现基本原理是,通过在Java代码加入特定的JavaDoc tag,从而为其添加特定
的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应
的配置文件,XDoclet。

血的教训,不要用 Key  当作变量名,不然无法自动生成数据库表。

@hibernate.class  

 

table 类对应的表名,默认值:当前类名
where 数据甄选条件,如果只需要处理库表中某些特定数据的时候,可通过此选项设定结果集限定条件。
dynamic-update

生成Update SQL时,仅包含发生变动的字段,默认值: false。dynamic-update="true"时,Update SQL 时候,只包括当前发生变化的字段(提高DB Update性能)。

dynamic-insert

生成Insert SQL时,仅包含非空(null)字段,默认值:false。  dynamic-insert="true" 时,Insert SQL 时候,只包括当前非空字段。(提高DB Insert性能)

discriminator-value 子类辨别标识,用于多态支持。     discriminator-value="1" discriminator-value 参数的目的是对多态提供支持。请参见下面关于@hibernate.discriminator的说明。
Proxy 代理类,默认值:空。     proxy=""  表明当前类不使用代理(Proxy)。代理类的作用是为Lazy.Loading提供支持
lazy Specifies the class itself to use for CGLIB proxy interface  默认:false                  lazy =" false " 表示不采用延迟加载

 

@hibernate.discriminator   

@hibernate.discriminator(识别器) 用于提供多态支持。

 

column 用于区分各子类的字段名称。默认值:当前类名
type 对应的Hibernate类型
length 字段长度 

 

 

 

 

 

 

 


注意下面的例子运行,应该是不能自动生成代码的,要把注释说明文档都删掉才可以,好象跟XDoclet文档有冲突,我以前有次就是写了些注释文档后就会出错。

/** *//**
*
* @hibernate.class
* table="TUser"
* dynamic-update="true"
* dynamic-insert="true"
*
* @hibernate.discriminator column="user_type" type="integer"
*/
public class TUser implements Serializable ...{
......
}
//根类TUser 中,通过@hibernate.discriminator 指定了以"user_type"字段
//作为识别字段。
/** *//**
* @hibernate.subclass
* discriminator-value="1"
*/
public class SysAdmin extends TUser ...{
......
}
/** *//**
* @hibernate.subclass
* discriminator-value="2"
*/
public class SysOperator extends TUser ...{
......
}
//SysAdmin 和SysOperator 均继承自TUser,其discriminator-value 分别设置
//为"1"和"2",运行期Hibernate 在读取t_user 表数据时,会根据其user_type 字段进行
//判断,如果是1 的话则映射到SysAdmin类,如果是2 映射到SysOperator 类。
 

@hibernate.subclass ,顾名思义,@hibernate.subclass与@hibernate.class
不同之处就在于,@hibernate.subclass 描述的是一个子类,实际上,这两个Tag
除去名称不同外,并没有什么区别。

 

 

/**
 * title: 论坛中的主帖子
 * 
 * @author conkeyn
 * @时间 2009-3-14:下午11:32:37
 * @hibernate.class table="tbl_thread" dynamic-update="true"
 *                  dynamic-insert="true"
 * @hibernate.discriminator column="thread_type" type="string" length="50"
 */
public class Thread extends DefaultId {

	/**  */
	private static final long serialVersionUID = 351051173463817068L;

	private String title;

	private String content;

	private Date addtime;

	/**
	 * @hibernate.property
	 * @return
	 */
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * @hibernate.property type="text"
	 * @return
	 */
	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	/**
	 * @hibernate.property
	 * @return
	 */
	public Date getAddtime() {
		return addtime;
	}

	public void setAddtime(Date addtime) {
		this.addtime = addtime;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.conkeyn.common.model.BaseObject#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object o) {
		// TODO Auto-generated method stub
		return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.conkeyn.common.model.BaseObject#hashCode()
	 */
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return 0;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.conkeyn.common.model.BaseObject#toString()
	 */
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return null;
	}

}

 

/**
 * title: 
 * @author conkeyn
 * @时间 2009-3-14:下午11:49:43
 * @hibernate.subclass dynamic-update="true" dynamic-insert="true" discriminator-value="c"
 */
public class Thread_C extends Thread {

	/**  */
	private static final long serialVersionUID = 3619991853952314367L;
	
	private String js;

	public String getJs() {
		return js;
	}

	public void setJs(String js) {
		this.js = js;
	}

}

  生成的xml标签:

<?xml version="1.0" encoding="UTF-8"?>

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

<hibernate-mapping>
	<class name="domain.Employee" table="t_employee"
		discriminator-value="0">

		<id name="id" column="id" type="java.lang.Long">
			<generator class="native" />
		</id>

		<discriminator column="type" type="integer" />
		
		<property name="name" type="java.lang.String" update="true"
			insert="true" column="name" />
		<subclass name="domain.EmployeeSale" discriminator-value="1">
			<property name="item" type="java.lang.String" update="true"
				insert="true" column="item" />
			<property name="total" type="java.lang.Integer" update="true"
				insert="true" column="total" />
		</subclass>
		
		<subclass name="domain.EmployeeSkill" discriminator-value="1">
			<property name="skill" type="java.lang.String" update="true"
				insert="true" column="skill" />
			<property name="level" type="java.lang.Integer" update="true"
				insert="true" column="level" />
		</subclass>

	</class>

</hibernate-mapping>

 SQL:

CREATE TABLE `t_employee` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `item` varchar(255) DEFAULT NULL,
  `total` int(11) DEFAULT NULL,
  `skill` varchar(255) DEFAULT NULL,
  `level` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 
 

2、使用 joined-subclass

 

3、联合使用subclass和joined-subclass

 

 

 

 

分享到:
评论

相关推荐

    xdoclet-bin-1.2.1.zip和xdoclet-bin-1.2.3.zip

    在“xdoclet-bin-1.2.1.zip”和“xdoclet-bin-1.2.3.zip”这两个压缩包中,我们可以找到XDoclet的不同版本。版本号的差异表明这两个版本可能包含了一些更新和改进。通常,软件的新版本会修复旧版本存在的bug,增加新...

    xdoclet-1.2.1.jar

    xdoclet-1.2.1.jar jar包,缺少的可以拿去

    xdoclet-src-1.2.1.zip eclipse

    XDoclet-1.2.1是该工具的一个版本,而xdoclet-src-1.2.1.zip则包含了这一版本的源代码,对于开发者而言,深入理解其工作原理和扩展功能提供了宝贵的资源。 Eclipse,作为全球最受欢迎的Java集成开发环境(IDE)之一...

    xdoclet-bin-1.2.1

    xdoclet-bin-1.2.1,xdoclet-bin-1.2.1,xdoclet-bin-1.2.1

    xdoclet-plugins-1.0.3

    《xdoclet-plugins-1.0.3:OA安全模块的核心工具》 在信息技术领域,XDoclet是一个备受推崇的Java开发工具,尤其在企业级应用的自动化文档生成和代码生成方面发挥着重要作用。"xdoclet-plugins-1.0.3"是一个专门...

    xdoclet-1.2.1 ZIP包中包含了使用方法,供大家方便配置

    《XDoclet-1.2.1:Eclipse项目的得力助手》 在软件开发过程中,Eclipse作为一款强大的集成开发环境(IDE),为开发者提供了丰富的功能和便利。然而,有时候我们在使用Eclipse进行Java开发时,可能会遇到“missing ...

    xdoclet-1.2.1.zip

    XDoclet-1.2.1是该工具的一个版本,包含了对1.2.1版本的支持。 标题中的“xdoclet-1.2.1.zip”表明这是一个包含XDoclet 1.2.1版本的压缩包文件。在Java开发中,开发者可能会遇到“Missing library: xdoclet-1.2.1....

    xdoclet-plugins-1.0.3下载附doc

    在Xdoclet-plugins-1.0.3这个版本中,开发者可以找到用于处理不同Java EE技术(如EJB、JMS)和ORM框架(如Hibernate)的特定插件。这些插件通过对Java源代码中的特定注释进行解析,生成对应的部署描述符、持久化映射...

    xdoclet-plugins-1.0.3.tar.gz

    而我们今天要探讨的是它的插件集合——"xdoclet-plugins-1.0.3.tar.gz"。 "XDoclet-plugins-1.0.3.tar.gz"是一个压缩包文件,其中包含了XDoclet的多个插件,这些插件扩展了XDoclet的功能,使其能够支持更多的框架和...

    xdoclet-base-locale-1.2.1.jar

    xdoclet-base-locale-1.2.1.jar

    xdoclet-plugins-1.0.3.rar

    1. **EJB插件**:XDoclet-EJB插件允许开发者通过在Java类上添加特定注解,自动生成EJB(Enterprise JavaBeans)的部署描述符(deployment descriptor),包括ejb-jar.xml和ejb-jar-bmp.xml等文件。这样,开发者无需...

    xdoclet-1.2.3-sources.jar

    在本文中,我们将深入探讨XDoclet及其1.2.3版本的源码包"**xdoclet-1.2.3-sources.jar**"。 XDoclet是由XDoclet项目团队开发的开源软件,其核心理念是通过在Java源代码中的注释中嵌入特定的元数据,然后根据这些元...

    xdoclet-1.2.1

    《XDoclet-1.2.1:Eclipse插件的解决方案与应用》 XDoclet-1.2.1是一款在Java开发中广泛使用的工具,尤其与Eclipse集成时,它扮演着不可或缺的角色。虽然它并非开发过程中的必需品,但对那些追求完美、希望消除...

    maven-xdoclet-plugin.jar

    maven-xdoclet-plugin.jar

Global site tag (gtag.js) - Google Analytics