`
p_3er
  • 浏览: 55782 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

第九章 关系映射 继承关联映射

 
阅读更多

1discriminator鉴别器

同一张表中表示不同的类型


employee表中定义一个type字段,表示员工的类型

name是所有的员工都有的属性。

sale_count是销售员特有的属性。

skiller是技术人员特有的属性。



三个实体类:

Employee:

package cn.framelife.mvc.entity;

import java.io.Serializable;

public class Employee implements Serializable {
	private Integer id;
	private String name;

	public Employee() {
	}

	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;
	}
}

Sales:

package cn.framelife.mvc.entity;

public class Sales extends Employee {
	private Integer saleCount;

	public Integer getSaleCount() {
		return saleCount;
	}

	public void setSaleCount(Integer saleCount) {
		this.saleCount = saleCount;
	}

}

Skiller:

package cn.framelife.mvc.entity;

public class Skiller extends Employee {
	private String skiller;

	public String getSkiller() {
		return skiller;
	}

	public void setSkiller(String skiller) {
		this.skiller = skiller;
	}

}



Employee.hbm.xml:

<hibernate-mapping>
	<!-- discriminator-value="0"鉴别器父类Employee默认的类型为0 -->
    <class name="cn.framelife.hibernate.entity.Employee" table="employee" catalog="hibernate" discriminator-value="0">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <!-- 配置鉴别器,配置表中的类型字段 -->
        <discriminator column="type"></discriminator>
        <property name="name" type="java.lang.String">
            <column name="name" length="45" not-null="true" />
        </property>
        <!-- 配置Employee的子类,并且设定类型的值 discriminator-value-->
        <subclass name="cn.framelife.hibernate.entity.Sales" discriminator-value="1">
        	<property name="saleCount" column="sale_count"></property>
        </subclass>
        <subclass name="cn.framelife.hibernate.entity.Skiller" discriminator-value="2">
        	<property name="skiller" column="skiller"></property>
        </subclass>
    </class>
    
</hibernate-mapping>



增加操作:

 tx = session.beginTransaction();
			//1、增加一个Employee
//			Employee employee = new Employee();
//			employee.setName("a");
//			session.save(employee);
			
			//2、增加一个Skiller
//			Skiller skiller = new Skiller();
//			skiller.setName("b");
//			skiller.setSkiller("kill somebody");
//			session.save(skiller);
			
			//3、增加一个Sales
			Sales sales = new Sales();
			sales.setName("c");
			sales.setSaleCount(100);
			session.save(sales);
			tx.commit();





2joined-subclass内连接

一张表表示一种类型







实体类与discriminator鉴别器的一样。



Employee.hbm.xml:


<hibernate-mapping>
	<class name="cn.framelife.hibernate.entity.Employee" table="employee"
		catalog="hibernate">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="native" />
		</id>

		<property name="name" type="java.lang.String">
			<column name="name" length="45" not-null="true" />
		</property>
		
		<!-- 这里是关键配置 -->
		<joined-subclass name="cn.framelife.hibernate.entity.Skiller"
			table="skiller">
			<key column="id"></key>
			<property name="skiller" column="skiller"></property>
		</joined-subclass>
		<joined-subclass name="cn.framelife.hibernate.entity.Sales"
			table="sales">
			<key column="id"></key>
			<property name="saleCount" column="sale_count"></property>
		</joined-subclass>
	</class>
</hibernate-mapping>



增加操作与discriminator鉴别器的一样。



3union-subclass

这种方法在表设计的时候不需要employee表,只需要子表。





实体类与discriminator鉴别器的一样。



Employee.hbm.xml:

<class name="cn.framelife.hibernate.entity.Employee"		catalog="hibernate">
		<!-- 这里的id生成策略不能使用数据库自增长(indentity,或者是像native,如果你使用的是数据库自增长的话).可以使用hilo或者increment -->
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="increment" />
		</id>

		<property name="name" type="java.lang.String">
			<column name="name" length="45" not-null="true" />
		</property>
		
		<!-- 这里是关键配置 -->
		<union-subclass name="cn.framelife.hibernate.entity.Skiller" table="skiller">
			<property name="skiller" column="skiller"></property>
		</union-subclass>
		<union-subclass name="cn.framelife.hibernate.entity.Sales" table="sales">
			<property name="saleCount" column="sale_count"></property>
		</union-subclass>
	</class>

</hibernate-mapping>


增加操作与discriminator鉴别器的一样。


分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    精通Java Web整合开发(第2版)

    第12章 基于annotation注解技术的ssh 2整合开发 12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决之道532 ...

    Hibernate课件

    5. **第7章 高级实体关联映射**:深入讲解了关联映射的高级特性,如双向关联、懒加载、级联操作、集合的有序性和唯一性约束,以及如何处理多对多关联。 6. **第9章 使用对象**:讲述了如何通过Session进行对象的...

    hibernate_reference中文文档.pdf

    ##### 1.2 第二部分 — 关联映射 此章节深入探讨了 Hibernate 中对象之间的关联映射。 - **1.2.1 映射 Person 类**:通过映射一个具体的 `Person` 类来展示一对一、一对多等关联类型的实现。 - **1.2.2 单向 Set-...

    Entity Framework 6 Recipes(中文word翻译版)

    第9部分 实体数据建模基础之继承关系映射TPH 第10部分 实体数据建模基础之两实体间Is-a和Has-a关系建模、嵌入值映射 第11部分 查询之异步查询 第12部分 查询之使用SQL语句 第13部分 查询之使用Entity SQL 第14部分 ...

    Hibernate实战(第2版 中文高清版)

     第7章 高级实体关联映射   7.1 单值的实体关联   7.1.1 共享的主键关联   7.1.2 一对一的外键关联   7.1.3 用联结表映射   7.2 多值的实体关联   7.2.1 一对多关联   7.2.2 多对多关联   7.2.3 把...

    软件工程课件:第9章 面向对象方分析(第三堂课).ppt

    本课件的第9章聚焦于面向对象方法论在软件工程中的应用,特别是第三堂课的内容,可能会深入探讨预约登记表和病人属性在系统中的角色。 面向对象分析的目标是识别问题域中的关键概念,并将它们映射为软件系统中的类...

    【计算机】第9章面向对象数据库.ppt

    OODBS的出现是为了克服传统关系数据库在处理复杂数据结构和继承关系时的局限性。然而,OODBS面临的问题包括缺乏统一标准和与关系数据库系统的不兼容性,这限制了其广泛应用。 9.3 面向对象数据库设计——ODL ODL...

    hibernate3.6 文档(pdf 格式)

    - **实现继承**:讨论如何利用 Hibernate 支持的继承映射策略来映射继承结构。 - **实现 equals() 和 hashCode()**:确保持久化类正确实现这两个方法以支持对象比较。 #### 五、基本 ORM 映射 - **映射声明**:讲解...

    NHibernate in Action by Christian Bauer

    本章解释了ORM标识的重要性,通过解释映射的继承和关联关系来建立预备知识。 第四章深入的介绍一些重要的概念:实体的生命周期,持久化状态,等同性。让我们了解这些知识是如何通过NHibernate 的API进行权衡。了解...

    使用映射自定义配置线程启动

    9. **工具使用**:标签中的“工具”可能指的是利用Java的并发库或其他第三方工具(如Apache Commons、Guava等)来辅助线程管理和配置。 10. **最佳实践**:自定义线程配置时,应遵循一些最佳实践,如合理设置线程池...

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

    1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 ...

Global site tag (gtag.js) - Google Analytics