`

Hibernate:类继承的实现方式(一)--父子类在同一个表中

阅读更多
Hibernate对继承关系的对象的处理分为多种形式:

第一种:继承链上的所有对象存放在一个表中

这种方式的缺陷:每次增加一个子类都要改动表结构!!而且,增加的字段不能有非空约束

domain对象:

public class Employee {
	
	private Integer id;
	private String name;
	
	public Employee(){}
	
	public Employee(String name){
		this.name = name;
	}
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}


public class Skiller extends Employee {
	
	private String skill;
	
	public Skiller(){}
	
	public Skiller(String name,String skill){
		super(name);
		this.skill = skill;
	}

	public String getSkill() {
		return skill;
	}

	public void setSkill(String skill) {
		this.skill = skill;
	}
}


public class Driver extends Employee {
	
	private Integer driverYears;
	
	public Driver(){}
	
	public Driver(String name,Integer driverYears){
		super(name);
		this.driverYears = driverYears;
	}

	public Integer getDriverYears() {
		return driverYears;
	}

	public void setDriverYears(Integer driverYears) {
		this.driverYears = driverYears;
	}
}



映射文件:


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.hibernate.inherit1">

	<class name="Employee" table="employee" discriminator-value="0">
		<id name="id" unsaved-value="-1">
			<generator class="native" />
		</id>
		<discriminator column="type" type="string"/>
		<property name="name"/>

		<subclass name="Skiller" discriminator-value="1">
			<property name="skill"/>
		</subclass>
		
		<subclass name="Driver" discriminator-value="2">
			<property name="driverYears"/>
		</subclass>
		
	</class>
</hibernate-mapping>



测试代码:

	public static void main(String[] args) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		
		Employee employee = new Employee("employee name");
		Skiller skiller = new Skiller("skiller name","play game");
		Driver driver = new Driver("driver name",30);
		
		session.save(employee);
		session.save(skiller);
		session.save(driver);
		
		tx.commit();
		session.close();
		
	}



执行的sql语句:

Hibernate: insert into employee (name, type) values (?, '0')
Hibernate: insert into employee (name, skill, type) values (?, ?, '1')
Hibernate: insert into employee (name, driverYears, type) values (?, ?, '2')




查询的时候,不论你查询的是父类还是子类,都可以使用:
		Employee employee = (Employee)session.get(Employee.class, 3);
		System.out.println(employee.getName());
		
		Employee employee = (Employee)session.get(Driver.class, 3);
		System.out.println(employee.getName());


输出的语句

Hibernate: 
    select
        driver0_.id as id0_0_,
        driver0_.name as name0_0_,
        driver0_.driverYears as driverYe5_0_0_ 
    from
        employee driver0_ 
    where
        driver0_.id=? 
        and driver0_.type='2'



!!!!!!!!!!!体现出多态效果!!!!!!!!
分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件  12.1.2 操纵持久化对象  12.2 继承关系树的根类对应一个表  12.2.1 创建映射文件  12.2.2 操纵持久化对象  12.3 继承关系树的每个类对应一个...

    hibernate3.2中文文档(chm格式)

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助...

    Hibernate+中文文档

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件  12.1.2 操纵持久化对象  12.2 继承关系树的根类对应一个表  12.2.1 创建映射文件  12.2.2 操纵持久化对象  12.3 继承关系树的每个类对应一个...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件  12.1.2 操纵持久化对象  12.2 继承关系树的根类对应一个表  12.2.1 创建映射文件  12.2.2 操纵持久化对象  12.3 继承关系树的每个类对应一个...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件  12.1.2 操纵持久化对象  12.2 继承关系树的根类对应一个表  12.2.1 创建映射文件  12.2.2 操纵持久化对象  12.3 继承关系树的每个类对应一个...

    HibernateAPI中文版.chm

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助...

    Hibernate中文详细学习文档

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助...

    Hibernate 中文 html 帮助文档

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    5.3. 多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助...

    最全Hibernate 参考文档

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory ...

    Hibernate教程

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant...

    ssh(structs,spring,hibernate)框架中的上传下载

     第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值...

    hibernate中文参考文档

    1、在Tomcat中快速上手 2、体系结构 3、SessionFactory配置 4、持久化类 5、O/R Mapping基础 6、集合类映射 7、组件映射 8、继承映射 9、操作持久化数据 10、事务和并行 11、Hibernate查询语言 12、条件查询 13、...

    hibernate 体系结构与配置 参考文档(html)

    多次映射同一个类 5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库...

    Hibernate3+中文参考文档

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory ...

    hibernate3.04中文文档.chm

    1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4....

    hibernate 教程

    第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式 3.2. 获取SessionFactory...

    Hibernate 3.6.0.Final Reference PDF 手册

    第 4 章 持久化类(Persistent Classes) 第 5 章 对象/关系数据库映射基础(Basic O/R Mapping) 第 6 章 Types 第 7 章 集合映射(Collection mappings) 第 8 章 关联关系映射 第 9 章 组件...

Global site tag (gtag.js) - Google Analytics